作为一名前端开发者,JavaScript无疑是我们最重要的那把利器。现在发展的MVVM框架、Node.js等相关技术,也都是建立在JavaScript原生之上。所以,学习、理解好JavaScript原生真的是太重要了。我现在只是一个小白啊,但要打起精神了,重新捋一遍JavaScript!
这篇文章主要是记录一下对数据类型的判断——typeof、instanceof以及===。
先说下js的数据类型:
string
number
boolean
null
undefined
Object(array function) // 暂不说ES6新增的symbol
(1 typeof)然后我直接以代码的形式解释
var a // 5.undefined
console.log(a, typeof a, typeof a === 'undefined', a === undefined)
// (打印输出为:)undefined 'undefined' true true
(typeof能判断出大多数的数据类型)
这里可以看到,undefined可以用typeof来判断,同时注意一点,type返回的值都是小写的数据类型的 字符串 表达
a = 'yuchen' // 1.string
console.log(typeof a, typeof a === 'string')
// string true 判断string
a = 4 // 2.number
console.log(typeof a, typeof a === 'number', a === Number)
// number true false 判断number
a = true // 3.boolean
console.log(typeof a, typeof a === 'boolean')
// boolean true 判断boolean
a = null // 4. null
console.log(typeof a, typeof a === 'object', a === null)
// object true true
// 注:'typeof null返回是object,所以无法用typeof判断null与object',
a = {name: 'yuchen'} // 6.object
console.log(typeof a, 'object对象')
// object 判断object
a = function () { // 7.function
return '嗯 黎海霞'
}
console.log(typeof a, 'function返回')
// function
// 注:typeof可以判断出function
a = [1,2,3]
console.log(typeof a, )
// object
// 注:'typeof array返回也是object,无法判断'
(讲完之后文末再总结)en ~ 还是先在这里总结一下吧:
typeof(注:typeof返回的值都是小写的数据类型的字符串表达如:'object而不是Object') 其实就是判断参数是什么类型的实例,就一个参数,例:typeof A
其返回值(只能是这6个):string/number/boolean/undefined/object/function
能判断 -string/number/boolean/undefined/object/function
不能判断 -null与object array与object(null、array返回的都是object,所以无法对它们进行判断)
(2 instanceof)
是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 当 A 的 __proto__ 指向 B 的 prototype 时,就认为 A 就是 B 的实例。 instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。
JS 中万物皆对象的思想(function array 也是object) :
判断对象的具体类型 (是对象 数组 还是函数)返回的值是大写的--Object、Array、Function
var b1 = {
b2: [1, 'abc', console.log],
b3: function () {
console.log('b3')
return function () {
return 'yuchen'
}
},
b4: 11
}
console.log(b1 instanceof Object, )
// true
console.log(b1.b2 instanceof Array, b1.b2 instanceof Object)
// true true(既然是数组,那当然也是对象啊——数组是一种特殊的对象)
console.log(b1.b3 instanceof Function, b1.b3 instanceof Object)
// true true(函数也是一种特殊的对象)
所以,你可以用instanceof来判断这个对象到底是哪种,是函数还是数组。
(3 ===)
全等很简单,它只能用来判断null 和 undefined(我猜想是因为它们两个都只有一个值的原因)返回一个布尔值,由此可判定。
var love
console.log(typeof love, love ===undefined)
// undefined true
love = null
console.log(typeof love, love === null)
// object true
总结一下:
1) typeof
返回的值都是小写的数据类型的字符串表达,如'object而不是Object'
能判断出多数:-string/number/boolean/undefined/object/function;
不能判断:-null与object array与object(null、array返回的都是object,所以无法对它们进行判断)。
2) instanceof
判断对象的具体类型 (是对象 数组 还是函数)返回的值是大写的--Object、Array、Function
JS 中万物皆对象的思想
3) ===
只能用来判断null 和 undefined(因为它们两个都只有一个值)
扩展一下:
// Question: 如何判断一个变量是否为数组?,
// 不要用 typeof 判断
typeof []; // object
// 这是es3的规定,但是这必须假定只有一个全局执行环境
[] instanceof Array; // true
// ES5的标准
Array.isArray([]); // true
// Answer: 通过 instanceof 判断,或者 isArray 来判断。
结论: (注:数组不能通过typeof来判断,可以通过instanceof、isArray来判断。
完毕:谢谢观看,小白一只,如有错误或想法请说明哦 ~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。