字符串与数值扩展【ES6】
有一些失败比胜利更有价值。——蒙田
目录
- 字符串扩展:
- includes函数:
- startsWith方法:
- endsWith方法:
- repeat函数:
- 数值扩展:
- 二进制和八进制表示法:
- Number.isFinite与Number.isNaN方法:
- Number.isFinite:
- Number.isNaN:
- Number.isInteger方法:
- 极小常量Number.EPSLON:
- Math.trunc:
- Math.sign:
字符串扩展:
includes函数:
判断一个数组/字符串中是否包含一个特定的项或子字符串的方法,如果包含则返回true,否则返回false。应用非常广泛,例如模糊搜索、模糊查询。
对于字符串的 includes() 方法,它可以接收两个参数:
- searchString(必需):要搜索的子字符串。
- position(可选):表示从哪个索引位置开始搜索,默认为 0。如果 position 是负数,则计算出的位置会从字符串末尾开始计算。
针对没有索引的情况:
let name = 'Kitty';
console.log(name.includes('K')); // true
console.log(name.includes('Ki')); //true
console.log(name.includes('a')); // false
针对有索引的情况:
let str = "Hello, world!";
console.log(str.includes("world")); // 输出: true
console.log(str.includes("World")); // 输出: false(区分大小写)
console.log(str.includes("o, w", 4));// 输出: true(从索引4开始搜索)
console.log(str.includes("o, w", -3)); // 输出: true(从字符串末尾往前数3个字符的位置开始搜索)
startsWith方法:
用于检测字符串是否以指定的前缀开始,startsWith 方法是区分大小写的,返回true/false。
对于startsWith 方法有两个参数:
- searchString(必需):要搜索的前缀字符串。
- position(可选):表示从哪个索引位置开始搜索字符串,默认为 0。如果 position 是负数,则计算出的位置会从字符串末尾开始计算。
针对没有索引的情况:
let name = 'Kitty';
console.log(name.startsWith('K')); // true
console.log(name.startsWith('Kit')); // true
console.log(name.startsWith('t')); // false
针对有索引的情况:
let str = "Hello, world!";
console.log(str.startsWith("world", 7)); // 输出: true(从索引7开始搜索)
endsWith方法:
别用于判断字符串是否以指定的后缀结束。同样区分大小写,返回true/false
endsWith 方法也有两个参数:
- searchString(必需):要搜索的后缀字符串。
- length(可选):表示要搜索的字符串长度,默认为字符串本身的长度。如果 length 是负数,则计算出的长度会与字符串长度相加。【也就是第二个参数是对于前n个字符来看往前搜索有没有我们输入的后缀字符串结尾】
针对没有长度这个可选参数的情况:
let name = 'Kitty';
console.log(name.endsWith('y')); // true
console.log(name.endsWith('tty')); // true
console.log(name.endsWith('t')); // false
针对有可选参数的情况:
let str = "Hello, world!";
console.log(str.endsWith("world", 12)); // 输出: true(搜索到字符串末尾)
console.log(str.endsWith("world", 6)); // 输出: false(只搜索到索引6)
repeat函数:
用于重复字符串指定的次数,并返回一个新的字符串。
它有一个参数:
- count(必需):重复的次数,必须是一个介于 0 和正无穷大之间的整数。如果 count 是 0,则返回空字符串;如果是负整数或无穷大,则抛出 RangeError。
let name = 'kitty';
console.log(name.repeat(2));// kittykitty
console.log(name.repeat(0));// 空字符串
console.log(name.repeat(2.8));// kittykitty 自动切掉小数点
console.log(name.repeat('AAa'));// 空字符串
console.log(name.repeat('3'));// kittykittykitty
数值扩展:
二进制和八进制表示法:
二进制表示用 0b 开头 “零b”
八进制表示用 0o 开头 “零o”
十六进制表示用 0x 开头 “零x”
let num1 = 100;
let num2 = 0x100; // 十六进制写法
let num3 = 0b100; // 二进制写法
let num4 = 0o100; // 八进制写法
console.log(num1); // 100
console.log(num2); // 256
console.log(num3); // 4
console.log(num4); // 64
Number.isFinite与Number.isNaN方法:
在ES6之前,isNaN 和 isFinite 都是全局方法,它们属于全局对象 window(在浏览器环境中)或 global(在Node.js环境中)。这意味着你可以在任何地方直接调用它们,不需要通过某个对象来访问。
// ES6之前
console.log(isNaN("abc")); // true
console.log(isFinite(123)); // true
这两个方法在判断时会先将非数值类型的参数转换为数值类型,然后再进行判断。这可能导致一些不直观的结果,比如 isNaN(“abc”) 返回 true,因为 “abc” 被转换为 NaN 后再判断。
在ES6之后,isNaN 和 isFinite 被移植到了 Number 对象上,成为了 Number.isNaN 和 Number.isFinite 方法。这意味着你需要通过 Number 对象来访问它们,如下所示:
// ES6及之后
console.log(Number.isNaN("abc")); // false
console.log(Number.isFinite(123)); // true
Number.isFinite:
Number.isFinite用于判断一个值是否为有限数。
它不会进行类型转换,只有当参数是有限数时(即不是 Infinity、-Infinity、NaN,且是数值类型)才返回 true。
console.log(Number.isFinite(123)); // true
console.log(Number.isFinite(100 / 0)); // false
console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite("abc")); // false 因为 "abc" 本身不是 NaN,且不会进行类型转换
console.log(Number.isFinite("100")); // false 因为它不会进行类型转换
Number.isNaN:
用于判断一个值是否为 NaN(Not-a-Number,非数值)。
它不会进行类型转换,只有当参数是 NaN 时才返回 true。
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(123)); // false
console.log(Number.isNaN("abc")); // false 因为 "abc" 本身不是 NaN,且不会进行类型转换
console.log(Number.isNaN("100")); // false 不会进行类型转换
Number.isInteger方法:
判断一个数值是否为整数。它不会进行类型转换!
console.log(Number.isInteger(100)); // true
console.log(Number.isInteger(100.0)); // true
console.log(Number.isInteger(100.5)); // false
console.log(Number.isInteger('kitty')); // false
console.log(Number.isInteger("100")); // false
极小常量Number.EPSLON:
它表示1 与 大于1的最小浮点数之间的差。2.2220446049250313e-16
我们在计算的时候是允许有极小常量的误差存在,而计算机是 不允许 0.30000000000000004 === 0.3的,这时候极小常量就派上用场了。
function isEqual (a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3)); // true
console.log(0.1 + 0.2 === 0.3); // false
console.log(0.1 + 0.2); // 0.30000000000000004
Math.trunc:
将小数部分抹掉,返回一个整数。
console.log(Math.trunc(1.2)); // 1
console.log(Math.trunc(1.8)); // 1
console.log(Math.trunc(-1.2)); // -1
console.log(Math.trunc(-1.8)); // -1
Math.sign:
用来判断一个数到底是正数、负数、还是零。对于非数值,会将其先转为数值。
console.log(Math.sign(-100)); // -1
console.log(Math.sign(+100)); // +1
console.log(Math.sign(0)); // +0
console.log(Math.sign(-0)); // -0
console.log(Math.sign('kitty')); // NaN