省的百度的小知识点(JS)

162 阅读2分钟

1.apply | call | bind

其实就是:让函数在某个指定的对象下执行,这个对象就是该函数的执行上下文;

Math.max.apply(null, [1,2,3,4]);  //4
foo.call(this,1,2,3); 
foo.bind(this)(1,2,3); //call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数

2.字符串方法

 str.indexOf(); //从左往右找,找不到时返回-1
 str.lastindexOf(); //从右往左找
 str.substring(index,index); //从下标开始截取,原字符串不改变
 str.slice(index,index);  //end下标前一位,原字符串不改变,可以为负值
 str.includes(str1); 
 str.startsWith(str1);  
 str.endsWith(str1); 

3.数组

3.1 push | unshift | pop | shift

var arr = [1,2,3,4,5];
arr.push(6); //原数组改变,返回值为数组长度
arr.unshift(); //同上
==========================
arr.pop(); //原数组改变,返回值为该删除项(string)
arr.shift();//同上

3.2 克隆数组

const arr = [1,2,4];
const newarr = [...arr];

3.3 slice| splice

//slice(index,index)
var arr = [1,2,3,4]
arr.slice(0,3);  //[1,2,3]  原数组不改变
//splece 原数组发生改变,返回值为删除的数组
    删除: arr.splice(index,count)
    插入: arr.splice(index, 0 , target)
    替换: arr.splice(index,1,target)
var arr = [1,2,3,4,5];
arr.splice(0,3); //[1,2,3]     arr为[4,5]
arr.splice(1,0,'insert'); //[]  arr为[4,insert,5]
arr.splice(1,1,'replace'); //['insert']  arr为[4, 'replace', 5]
 

3.4 Array.of(): 将一组值转化为数组; Array.form(): 将伪数组或可遍历的对象转化为数组

Array.of(1,2,3); //[1,2,3]
Array.form({'0': 1, 'length': 1}) //[1]

3.5 array.some | array.every

var arr = [1,2,4,5];
arr.some((item) => {
    return item > 4
}) //true
arr.every((item) =>  {
    return item >= 1
}) //true

3.6 filter | map 原数组都不变,返回新的数组

//filter 
var arr = [                                         
     {"name":"apple", "count": 2},
     {"name":"orange", "count": 5},
     {"name":"pear", "count": 3},
     {"name":"orange", "count": 16},
];
arr.filter((item) => {
    return item.name == 'orange';
}) //[{"name":"orange", "count": 5},{"name":"orange", "count": 16}]
//map
var oldArr = [
     {first_name:"Colin",last_name:"Toh"},
     {first_name:"Addy",last_name:"Osmani"},
     {first_name:"Yehuda",last_name:"Katz"}
];
oldArr.map((item) => {
    return {'name': item.first_name + item.last_name}
})//[{name: "ColinToh"},{name: "AddyOsmani"},{name: "YehudaKatz"}]

3.7 find()| findIndex()
找出符合表达式的那一项 | 下标

//find
var arr = [{name: 'jack'}, {name: 'rose'}];
arr.find((item) => { return item.name == rose}).name = 'jack_love_rose';
arr//[{name: 'jack'}, {name: 'jack_love_rose'}]
//findIndex
arr.find((item) => { return item.name == 'jack_love_rose'}); //-1

4.一些方法

4.1 Object.assign(target, source1, source2...); 浅拷贝,目标对象拷贝得到的是这个对象的引用; 
var arr = {name: 'jack', age: ''};
var foo = {name: 'rose'};
var newarr = Object.assign(arr, foo); //{name: 'rose', age: ''};
//
var arr =  {name: 'jack', age: ''};
var newarr = Object.assign({}, arr);
arr.age = 12;
newarr//{name: 'jack', age: 12}

4.2 Object.prototype.toString.call();

精确判断值类型
var toString = Object.prototype.toString;
toString.call(new Date); // "[object Date]"
toString.call(new String); // "[object String]"
toString.call(Math); // "[object Math]"
toString.call(/s/); // "[object RegExp]"
toString.call([]); // "[object Array]"
toString.call(() =>{}) // "[object Function]"
//Since JavaScript 1.8.5
toString.call(undefined); // "[object Undefined]"
toString.call(null); // "[object Null]"