美文网首页
字符串、Math、数值的扩展方法

字符串、Math、数值的扩展方法

作者: 浅忆_0810 | 来源:发表于2020-10-01 09:40 被阅读0次

1. 字符串扩展

1.1 includes()startWith()endsWith()

传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法

  • includes():返回布尔值,表示是否找到了参数字符串。

  • startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。

  • endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部

    let s = 'Hello world!';
    
    s.startsWith('Hello') // true
    s.endsWith('!') // true
    s.includes('o') // true
    

    这三个方法都支持第二个参数,表示开始搜索的位置

    let s = 'Hello world!';
    
    s.startsWith('world', 6) // true
    s.endsWith('Hello', 5) // true
    s.includes('Hello', 6) // false
    

    上面代码表示,使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。

1.2 repeat

repeat方法返回一个新字符串,表示将原字符串重复n次。

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""
  • 参数如果是小数,会被向下取整。
  • 如果repeat的参数是负数或者Infinity,会报错。
  • 01 之间的小数,则等同于 0,这是因为会先进行取整运算。0-1 之间的小数,取整以后等于-0repeat视同为 0
  • 参数NaN等同于 0
  • 如果repeat的参数是字符串,则会先转换成数字。

1.3 padStart()padEnd()

ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全

'x'.padStart(5, 'ab') // 'ababx'

'x'.padEnd(5, 'ab') // 'xabab'
  • 如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
  • 如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。
  • 如果省略第二个参数,默认使用空格补全长度。

2. 数值的扩展

2.1 Number.isFinite()Number.isNaN()

Number.isFinite()用来检查一个数值是否为有限的(finite

Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false

Number.isNaN()用来检查一个值是否为NaN

和全局函数 isNaN() 相比,该方法不会强制将参数转换成数字,只有在参数是真正的数字类型,且值为 NaN 的时候才会返回 true

Number.isNaN(NaN);        // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0)       // true

// 下面这几个如果使用全局的 isNaN() 时,会返回 true。
Number.isNaN("NaN");     // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
Number.isNaN(undefined); // false
Number.isNaN({});        // false
Number.isNaN("blabla");  // false

// 下面的都返回 false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");

2.2 Number.parseInt()Number.parseFloat()

ES6 将全局方法parseInt()parseFloat(),移植到Number对象上面,行为完全保持不变

// ES5的写法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45

// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45

这样做的目的,是逐步减少全局性方法,使得语言逐步模块化

Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true

2.3 Number.isInteger()

Number.isInteger()用来判断一个值是否为整数。需要注意的是,在 JavaScript 内部,整数和浮点数是同样的储存方法,所以 33.0 被视为同一个值

Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false
Number.isInteger("15") // false
Number.isInteger(true) // false

3. Math 对象的扩展

ES6Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用

3.1 Math.trunc()

Math.trunc方法用于去除一个数的小数部分,返回整数部分

Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0
  • 对于非数值,Math.trunc内部使用Number方法将其先转为数值。
  • 对于空值和无法截取整数的值,返回NaN

3.2 Math.sign()

Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值

它会返回五种值。

  • 参数为正数,返回+1

  • 参数为负数,返回-1

  • 参数为 0,返回0

  • 参数为-0,返回-0

  • 其他值,返回NaN

    Math.sign(-5) // -1
    Math.sign(5) // +1
    Math.sign(0) // +0
    Math.sign(-0) // -0
    Math.sign(NaN) // NaN
    
    Math.sign('')  // 0
    Math.sign(true)  // +1
    Math.sign(false)  // 0
    Math.sign(null)  // 0
    Math.sign('9')  // +1
    Math.sign('foo')  // NaN
    Math.sign()  // NaN
    Math.sign(undefined)  // NaN
    

3.3 Math.cbrt()

Math.cbrt方法用于计算一个数的立方根

对于非数值,Math.cbrt方法内部也是先使用Number方法将其转为数值

Math.cbrt(-1) // -1
Math.cbrt(0)  // 0
Math.cbrt(1)  // 1
Math.cbrt(2)  // 1.2599210498948734

3.4 Math.hypot()

Math.hypot方法返回所有参数的平方和的平方根

Math.hypot(3, 4);        // 5
Math.hypot(3, 4, 5);     // 7.0710678118654755
Math.hypot();            // 0
Math.hypot(NaN);         // NaN
Math.hypot(3, 4, 'foo'); // NaN
Math.hypot(3, 4, '5');   // 7.0710678118654755
Math.hypot(-3);          // 3

4. 指数运算符

ES2016 新增了一个指数运算符(**

2 ** 2 // 4
2 ** 3 // 8

指数运算符可以与等号结合,形成一个新的赋值运算符(**=

let a = 1.5;
a **= 2;
// 等同于 a = a * a;

let b = 4;
b **= 3;
// 等同于 b = b * b * b;

相关文章

  • 字符串、Math、数值的扩展方法

    1. 字符串扩展 1.1 includes()、startWith()、endsWith() 传统上,JavaS...

  • ES6扩展

    字符串扩展 正则扩展 数值扩展 函数扩展 对象扩展 数组扩展 字符串扩展 模版字符串 部分新的方法 padStar...

  • 《ECMAScript 6 入门》笔记

    变量的解构赋值 字符串的扩展 正则的扩展 数值的扩展 函数的扩展 数组的扩展 对象的扩展 对象的新增方法 表单验证...

  • ES6 - ECMA2016 - 学习总结

    新的概念与方法 概略图: 基本使用 数值求幂 古老的: 新增的(相当于Math.pow()) 数组扩展 新增 in...

  • 数值Math方法

    Math 向上取整Math.ceil() 向下取整Math.floor() 四舍五入Math.round() 最大...

  • ES6之数值扩展

    ES6对数值的扩展,说是扩展,但是更像是对ES5中的数值的一个方法的添加和补充,其变化远没有字符串的扩展变化...

  • 2017-12-26es6-函数扩展

    扩展 1、字符串扩展 2、模板字符串 **** 3、数值扩展 4、函数扩展用于分页居多 rest 参数 ...变量...

  • ES6扩展

    字符串的扩展正则的扩展数值的扩展数组的扩展函数的扩展对象的扩展

  • SE6扩展和Vue

    在上一篇文章末尾已经介绍过几种SE6的扩展了,今天带来一些使用的方法. 字符串扩展 数值扩展 数组扩展 对象扩展 ...

  • 判断字符串是否为数字

    【主题思想】实现方式、isNaN() VS 正则 请给字符串扩展一个 isNumber 方法,判断字符串是否是数值...

网友评论

      本文标题:字符串、Math、数值的扩展方法

      本文链接:https://www.haomeiwen.com/subject/gqnyuktx.html