美文网首页
字符串扩展、函数的扩展

字符串扩展、函数的扩展

作者: 追逐_e6cf | 来源:发表于2018-10-11 17:24 被阅读0次

    一、字符串扩展
    includes() 返回布尔值,表示是否找到了参数字符串
    startsWith() 返回布尔值,表示参数字符串是否在原字符串的头部。
    endsWith() 返回布尔值,表示参数字符串是否在原字符串的尾部。
    repeat(n) repeat方法返回一个新字符串,表示将原字符串重复n次。

    let str = "Hello World!";
    console.log(str.includes("llo"));
    console.log(str.startsWith("Hello"));
    console.log(str.endsWith("!"));
    console.log(str.repeat(1));
    

    padStart() 用于头部补全
    padEnd() 用于尾部补全

    let str = "5";
    console.log(str.padStart(10, "abcde"))
    console.log(str.padStart(10))
    console.log(str.padStart(10, ""))
    

    模板字符串

    • 不是单引号或双引号,而是使用反引号
    • 反引号里面引用的内容可以换行
    • 如果需要引入变量,则变量的写法为${}
    • ${}不会与jq内容混合
    let person = "World";
    let str = `Hello ${person}!`;
    console.log(str)
    
    let str = `<div>
      <ul>
        <li></li>
      </ul>
    </div>`
    console.log(str);
    

    标签模板

    console.log`123`;
    

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

    console.log(Number.isFinite(15))  //true
    console.log(Number.isFinite(0.8))  //true
    console.log(Number.isFinite(NaN))  //false
    console.log(Number.isFinite(Infinity))  //false
    console.log(Number.isFinite(-Infinity))  //false
    console.log(Number.isFinite('foo'))  //false
    console.log(Number.isFinite('15'))  //false
    console.log(Number.isFinite(true))  //false
    console.log(Number.isFinite(1/3))  //true
    

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

    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(" ");
    

    parseInt()、parseFloat()

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

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

    console.log(Math.trunc(4.1))
    console.log(Math.trunc(4.9))
    console.log(Math.trunc(-4.1))
    console.log(Math.trunc(-4.9))
    console.log(Math.trunc(-0.1234))
    

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

    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
    

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

    console.log(Math.cbrt(-1))  //-1
    console.log(Math.cbrt(0))  //0
    console.log(Math.cbrt(1))  //1
    console.log(Math.cbrt(8))  //2
    

    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
    

    四、函数的扩展

    function fn(a, b, c, d){
      //argument.length打印的是实参个数
      console.log(argument.length)
    }
    console.log(fn.length)  //fn.length返回的是形参的个数
    fn(1, 2, 3)
    
    function fn(a, b=3, c, d=1){
      //argument.length打印的是实参个数
      console.log(arguments.length)
    }
    console.log(fn.length)
    fn()
    //fn.length会受到这个默认值的影响,遇到默认值的情况就停止下来
    

    五、临时作用域
    1.如果说到解析当中,形参当中如果有默认值,会形成一个临时作用域
    2.如果在当前的作用域里面去找值,如果没有声明,则往父级去找
    3.注意区分已经声明和没有声明的区别

    var x = 1;
    function fn(x, y=x){  //临时作用域let x; x = 5; y = x = 2;
      console.log(y)
    }
    fn(5)
    
    var x =1;
    function fn(x, y=x){  //let x; x = undefined;  y = x = undefined;
      console.log(y)
    }
    fn()
    
    var x = 1;
    function fn(y=x){  //x =1; y = x = 1;
      console.log(y)
    }
    fn()
    
    var x = 1;
    function fn(x=x){  //let x; x = x;
      console.log(x)
    }
    fn()
    
    let x = 1;
    function fn(x, y=function(){x=2}){  //x=2;
      console.log(x)
      var x = 3;
      console.log(y)
      y();
      console.log(x) //3
    }
    fn()
    
    let x = 1;
    function fn(x, y = function(){x=2}){  //let x = undefined;  x=3;  x=2
      console.log(x)
      x = 3;
      console.log(y)
      y();  //x=2
      console.log(x)  
    }
    fn()
    

    六、箭头函数
    var f = function(v){
    return a;
    }
    var f = 定义变量
    =>左边的值(v):形参
    =>右边的值(a):return值
    箭头函数本身不属于正规函数,是类似函数表达式
    apply,bind,call都失效,因为他的作用域本身没有this指针,里面可以存在this指针,this指针指向父级

    var f = v => a;
    
    var f = function(a, b){
      let num = a + b;
      console.log(num);
    }
    f(1, 2)
    
    var f = (a, b) => {
      let num = a + b;
      console.log(num)
      return num;
    }
    console.log(f(1, 2));
    
    var f = function(){
      console.log(123)
    }
    
    var f = () =>{
      console.log(123)
    }
    
    let obj = {
      fn:function(){
        console.log(this)
      },
      f:() => {
        console.log(this)
      }
    }
    obj.fn()
    obj.f()
    

    相关文章

      网友评论

          本文标题:字符串扩展、函数的扩展

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