Skip to content

等式判断

基于原型链的

js
Object.prototype.constructor === Object; //True

Object.__proto__ === Function.prototype; //True

Object.prototype.__proto__ === null; //True

null instanceof Object; //False

typeof null === "object"; //True

其他等式比较

js
{}==={};//false

NaN===NaN;//false

[]===[];//false

// ![]  空数组是true,所以![]是false
![]==false;//true

// 非严格比较时,[]会被转换为false
![]==[];//true

// 正则表达式也是对象,每次创建一个新的正则表达式,它的内存引用不同
/a/===/a/;//false


// new String('1')创建了一个包装对象,1是原始值
1===new String('1');//false

var arr=[NaN];
arr.indexOf(NaN);//-1
// NaN与任何值都不相等,包括它自身

Number.isNaN(NaN);//true

Number.isNaN(123);//false

Number.isNaN(undefined);//true

Number.isNaN(null);//false

Number.isNaN('abc');//true

输出

js
class Foo {
  constructor(arr) {
    this.arr = arr;
  }
  bar(n) {
    return this.arr.slice(0, n);
  }
}

var f=new Foo([0,1,2,3]);
f.bar(1);//[0]
f.bar(2).splice(1,1);//[1]
f.arr;//[0,1,2,3]

splice用法:

array.splice(start, deleteCount, item1, item2, ..., itemN)

  • start:必填参数。表示从哪个索引位置开始修改数组。可以是负数,表示从数组末尾开始计算位置。

  • deleteCount:可选参数。表示要删除的元素个数。如果 deleteCount 是 0,则不删除元素。如果没有指定此参数,或者它的值大于从 start 开始的剩余元素的数量,则删除从 start 开始的所有元素。

  • item1,item2,...,itemN:可选参数。要添加到数组中的元素,从 start 位置开始。如果不指定此参数,splice() 仅执行删除操作。