null 表示一个对象是“没有值”的值,也就是值为“空”。undefined 表示一个变量声明了没有初始化(赋值)。undefined不是一个有效的JSON,而null是。
浅拷贝 :只复制指向某个对象的指针,而不复制这个对象本身,新旧对象共享一块内存。
深拷贝 :复制并创建一个一模一样的对象,不共享内存,修改新对象旧对象不会变。
1、都是用来改变函数执行时的上下文,再具体一点就是改变函数运行时的this指向
2、区别:参数书写方式不同
call(thisObj, arg, arg2, arg3);
apply(thisObj, [args]);
bind(thisObj,arg, arg2, arg3)(); //bind 返回的是一个新的函数,必须调用它才会被执行。
1、原型对象(Person.prototype)是 构造函数(Person)的一个实例。
2、JavaScript是⾯向对象的,每个实例对象都有⼀个__proto__属性,该属性指向它的原型对象,这个实例对象的构造函数有⼀个原型属性 prototype,与实例的proto属性指向同⼀个对象。当⼀个对象在查找⼀个属性的时候,⾃⾝没有就会根据__proto__向它的原型进⾏查找,如果 都没有,则向它的原型的原型继续查找,直到查到Object.prototype.proto_为null,这样也就形成了原型链。
原型链的顶层就是Object.prototype,而这个对象的是没有原型对象的。
1、在判断一个变量是否存在时应该用typeof来判断。
2、当判断一个变量是否是数组类型时使用 instanceof 关键字而不是 typeof。
3、如何判断一个对象是否属于某个类使用instanceof。