类型判断
注意:typeof能判断除null外的所有基本数据类型,引用类型需要使用instanceOf进行判断。
Object和object进行区别,Object是功能完整的对象,object只是一个字符串
万物皆对象!!!
typeof :返回一个表示数据类型的字符串。"number", "string","boolean","object","function","undefined"。所有引用类型(对象)返回都是object,例如对象、数组、时间,还有null
instanceof :用来测试一个 对象 在其原型链中是否存在一个构造函数prototype属性。不能检测基本类型,只能检测实例(所有引用类型值都是Object的实例:数组、对象、用new创建的新函数)。可以区分数组(输出为Array)、日期(输出为Date),但无法判断原始类型: const a = 3 ,无法判断a的类型。 从原型链上面寻找(变量__proto__的constructor (构造函数)的类型),查找继承的所有的prototype
constructor :可以判断所有类型(存在于__proto__属性中)。变量1.constructor==String
Object.prototype.toString.call(obj) == '[object Object/Array/String/Number/Boolean/Null/Undefined]' 能够给出所有数据的类型
new 的过程
文章:click
视频:click
new创建一个对象实例,对象可以是系统自带引用数据类型(Number、Object、String、Boolean…已经含有构造函数),也可以是自定义的
//通过new一个函数来创建一个对象实例,对象实例包含函数及函数上下文
//首先需要一个对象,然后往里面添加一个函数,函数调用过程中的this再指向包含它的对象
//能够改变this指向,指向new出来的对象
//1. 创建一个空对象
//2. 把构造函数的原型绑定到新对象的原型上
//3. 构造函数被执行,执行过程中this被绑定到新对象上
//4.返回这个新对象,(构造函数中一般不会显示返回,但有时也可以 return this)
function Person(name){
this.name = name;
console.log('2')
}
function newOperator(constructor,argument){
const obj = {}
Object.setPrototypeOf(obj,constructor.prototype)
console.log('1')
constructor.call(obj,argument) //此处执行构造函数
console.log('3')
return obj
}
const person1 = newOperator(Person , 'aaaa') //创建的是Person的新对象
console.log(person1) //返回为person对象,里面包含name和原型,详情如图
function Test(){
this.a = 1;
}
const test = new Test(); //此处反应对象也是方法
Test.prototype.b=2; //test.hasOwnProperty('b') 时为true
Object.prototype.c=3 //test.hasOwnProperty('c') 时为false,但('a' in test)为true,在链上寻找
/*
test{
a:1,
__proto__:Test.prototype = {
b:2,
__proto__:Object.prototype = {
c:3
no __proto__(最顶层对象的prototype已经没有了原型链)
}
}
}
//由此可以看出,原型链是以对象为基准,以__proto__为链接点的链条,一直到Object。以原型为节点进行链接
*/
console.log(test.a)
console.log(test.b)
console.log(test.c)//以上三个都能打印,在本身对象内部找不到就会去链上找,原型链继承找法
console.log('a' in test)//
prototype:原型,是函数的一个属性,是一个对象
__proto__:原型链( 原型链接点 更形象),是对象Object(广义对象)的一个属性,是一个对象{},
对象(new出来的)的__proto__保存着该对象的构造函数的prototype
函数一声明就有prototype属性
对象(new出来的)天生就有__proto__
作用域链click
由于变量的查找是沿着作用域链来实现的,所以也称作用域链为变量查找的机制