1. typeof运算符(常用)
js 代码解读复制代码console.log(typeof "hello"); //string
console.log(typeof 42); //number
console.log(typeof true); //boolean
console.log(typeof undefined); //undefined
console.log(typeof null); //object
console.log(typeof Symbol(2)); //symbol
console.log(typeof function () {}); //function
console.log(typeof {}); //object
console.log(typeof []); //object
typeof
返回操作数的类型。这里注意null在js中被认定为一个特殊的对象,数组也被认定为对象
2. instanceof运算符(常用)
js 代码解读复制代码console.log({} instanceof Object); //true
console.log(Symbol(2) instanceof Symbol); //false无法判断
console.log("hello" instanceof String); //false无法判断
console.log([] instanceof Array); //true
console.log({} instanceof Object); //true
console.log(function () {} instanceof Function); //true
console.log(function () {} instanceof Object); //true
instanceof
运算符,用于测试构造函数的prototype属性是否出现在对象的原型链中,注意instanceof运算符无法用于检测原始类型的值。第6、7两条,为什么Function、Object都判断为true呢?这就涉及到原型链的知识:下面贴一个原型链的图例自行理解:
3. Object.prototype.tostring.call()方法(常用)
js 代码解读复制代码Object.prototype.toString.call(42); // "[object Number]"
Object.prototype.toString.call("hello"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(Symbol(2)); // "[object Null]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
这个方法可以准确判断对象的类型,它返回一个表示对象类型的字符串。
4. Array.isArray()(常用)
js 代码解读复制代码console.log(Array.isArray([])); //true
console.log(Array.isArray({})); //false
用于判断传入的参数是否是一个数组,主要也就用来判断数组类型。
5. construcotr属性(不常用)
js 代码解读复制代码console.log(
function name(params) {
[];
}.constructor
);//Function
construcotr
返回对象的构造函数,但当对象的原型链被更改时会判断不准确。示例如下:
js 代码解读复制代码function Animal() {}
function Bird() {}
// 创建一个Animal类型的实例
var animal = new Animal();
// 检查animal的constructor属性
console.log(animal.constructor === Animal); // 输出:true
// 更改animal的原型
animal.__proto__ = Bird.prototype;
// 再次检查animal的constructor属性
console.log(animal.constructor === Animal); // 输出:false
console.log(animal.constructor === Bird); // 输出:true
6. 注意事项总结
typeof
对于null
类型会返回"object"
,这是一个历史遗留问题。typeof
对于函数会返回"function"
,尽管在JavaScript中函数是对象的一种。instanceof
不能正确判断原始类型(如String
、Number
等),因为它期望左操作数是一个对象。- 使用
constructor
属性时,如果对象的原型被更改,则可能会导致判断不准确。
评论记录:
回复评论: