字符串扩展、函数的扩展

一、字符串扩展
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 = `
` 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()

你可能感兴趣的:(字符串扩展、函数的扩展)