ES6系列 (二)新的字符串方法
2019-10-11 本文已影响0人
Eastboat
方法
- String.prototype.startsWith()
- String.prototype.endsWith()
- String.prototype.includes()
- String.prototype.repeat()
思考题
如何修改函数使得返回的时间永远是两个字符长度表示 03:03
//获取当前的小时数和分钟数
function getTime() {
const date = new Date();
return date.getHours() + ":" + date.getMinutes();
}
console.log(getTime()); // 上午3时03分会返回 字符串3:3
搜索字符串
所有这些方法都是区分大小的,执行搜索前要将字符串小写化
所有这些方法还可以指定第二个参数指定字符串中的起始搜索位置
startsWith()
下面我们来看两个案例
/*
1.来自不同厂家的产品数据,价格字段有的有美元符,没有的需要我们自己加上,
所以需要检查是否已存在$的字段
*/
const PRODUCT_ARR = [
{
id: 0001,
name: "加多宝",
price: "$1.00"
},
{
id: 0002,
name: "农夫山泉",
price: "0.5"
},
{
id: 0003,
name: "脉动",
price: "$0.80"
},
{
id: 0004,
name: "味全每日C",
price: "1.3"
}
];
for (let i of PRODUCT_ARR) {
if (i.price[0] === "$") {
//判断第一个字符有美元符
console.log(i);
} else {
//没有的我们手动加上
}
}
/*
2。根据用户的当前电话判断所在区
*/
let userTel = "021-888-8880";
const AREA_CODE = "021";
if (userTel.substr(0, 3) === AREA_CODE) {
console.log(`当前用户的号码是在此区域`);
}
现在有了 ES6 的startsWith()
,我们可以改写如下:我们一眼就能看出他在做什么。
if (i.price.starstWith("$")) {
//....
}
if (userTel.starstWith(AREA_CODE)) {
//....
}
endsWith()、includes()
let name = "east-boat";
console.log(name.startsWith("east")); //true
console.log(name.endsWith("boat")); //true
console.log(name.includes("t-b")); //true
console.log(name.includes("-bo")); //true
填充字符串
要求某个函数接受用十进制(基数为 10)表示的 IP 地址,将其转化为二进制(基数为 2)表示
function binaryIP(decimalIPStr) {
return decimalIPStr
.split(".")
.map(function(octet) {
return Number(octet).toString(2);
})
.join(".");
}
console.log(binaryIP("192.168.2.1")); //11000000.10101000.10.1
但是当 ip 地址小于 128 的数时,二进制数小于 8 位数字,此时上面的函数是无法执行的
解决办法:需要用 0 填充每一个字节,知道每一个都是 8 位
String.prototype.repeat
'0'.repeat(8) // 调用8次 '00000000'
'0'.repeat(4.9) // 如果不是整数,向下取整而不是四舍五入 '0000'
// 添加es6特性解决
function binaryIP(decimalIPStr) {
return decimalIPStr
.split(".")
.map(function(octet) {
let bin = Number(octet).toString(2);
return "0".repeat(8 - bin.length) + bin;
})
.join(".");
}
console.log(binaryIP("192.168.2.1")); //11000000.10101000.00000010.00000001