typeof 是一个一元操作符不是函数,所以不需要传递参数,使用方法非常简单:typeof A
let s = "Nicholas";
let b = true;
let i = 22;
let u;
let sb = undefined;
console.log(typeof s); // string
console.log(typeof b); // boolean
console.log(typeof i); // number
console.log(typeof u); // undefined
console.log(typeof sb); // undefined
let o = {}; let a = [];
console.log(typeof o); // object
console.log(typeof a); // object
let n = null;
console.log(typeof n); // object
虽然typeof null为object,但这只是JavaScript 存在的一个悠久 Bug,不代表null就是引用数据类型,并且null本身也不是对象
let nn = function() {}
console.log(typeof nn); // function
let date0 = new Date()
console.log(typeof date0); // object
let r = /a-z/;
console.log(typeof r ); // object
let sss = new String('sss')
let nnn = new Number(123)
let bbb = new Boolean(true)
let fff = new Function ()
console.log(typeof sss) // object
console.log(typeof nnn) // object
console.log(typeof bbb) // object
console.log(typeof fff) // function
使用new操作符,除Function外的所有构造函数的类型都是object。
instance中文翻译为实例,instanceof就是判断该对象是谁的实例。与typeof不同,它返回布尔值。
instanceof是对象运算符。
instanceof的判断就是根据原型链进行搜寻,在对象obj1的原型链上如果存在另一个对象obj2的原型属性,那么表达式(obj1 instanceof obj2)返回值为true;否则返回false。
所以:
let sss = 'sss'
let nnn = 123
let bbb = true
console.log(sss instanceof String) // false
console.log(nnn instanceof Number) // false
console.log(bbb instanceof Boolean) // false
因为sss nnn bbb是原始值,而不是通过包装函数生成的实例。
let sss = new String('sss')
let nnn = new Number(123)
let bbb = new Boolean(true)
console.log(sss instanceof String) // true
console.log(nnn instanceof Number) // true
console.log(bbb instanceof Boolean) // true
正则和函数也一样
let rrr = new RegExp(/a-z/)
var fff = new Function()
console.log(rrr instanceof RegExp) // true
console.log(fff instanceof Function) // true
如果是作用在自己定义的构造函数呢?
let Cat = function() {}
let benz = new Cat()
benz instanceof Cat // true
benz是实例不是构造函数所以:
benz instanceof Object // true
benz instanceof Function //false
再来个构造函数:
let BigCat = function() {}
BigCat.prototype = new Cat();
let bigBenz = new BigCat()
bigBenz instanceof Car // true
再来个奇葩的
let obj = Object.create(benz); //Car {}
obj instanceof Object //true
let obj = Object.create(null);
obj instanceof Object // false
instanceof检测null和undefined :
null instanceof Object // false
undefined instanceof Object // false