We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JS中的基本数据类型: 1. Undefined 2. Null 3. Boolean 4. Number 5. String 6. Symbol
复杂数据类型:Object;Array,Fuction, Object这些引用类型都是复杂数据类型
typeof 操作符返回一个字符串,表示未经计算的操作数的类型
typeof undefined "undefined" typeof null "object" typeof true "boolean" typeof 1 "number" typeof 'a' "string" typeof Symbol() "symbol" typeof {} "object" typeof [] "object" typeof function(){} "function"
由上面可以看出,null,object,array返回的结果都是 object, 无法区分这三种,再看下第二种方法
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性
var a = {}; var b = []; a instanceof Object; // true b instanceof Array; // true b instanceof Object: // true
可以看出,第二种方法只能区分出 Array, 无法区分 Object
function getType(v) { var c = v.constructor; switch(c) { case Object: return 'object'; case Array: return 'array'; case Function: return 'function'; case String: return 'string'; case Number: return 'number'; } }
当输入null 或者 undefined 时会抛出错误,所以需提前判断
function getType(v) { if (v === null) return 'null' if (v === undefined) return 'undefined' var c = v.constructor; switch(c) { case Object: return 'object'; case Array: return 'array'; case Function: return 'function'; case String: return 'string'; case Number: return 'number'; } }
如果涉及到原型链的继承,并不推荐
function A(){} var B = new A() B.constructor === Object // false
Object.prototype.toString.call([]) "[object Array]" Object.prototype.toString.call({}) "[object Object]" Object.prototype.toString.call(function(){}) "[object Function]" Object.prototype.toString.call('a') "[object String]" Object.prototype.toString.call(1) "[object Number]" Object.prototype.toString.call(null) "[object Null]" Object.prototype.toString.call(undefined) "[object Undefined]"
完美解决所有类型
除Null之外的四种基本类型值的判断 Number, String, Boolean, Undefined,用typof 即可
Null类型的判断
《Javascript高级程序设计 第五章第六节 基本包装类型》
为了方便操作基本类型值,ECMAscript提供了3个特殊的引用类型:Boolean, Number, String。每当读取一个基本类型值时,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据
var s1 = "some test"; var s2 = s1.substring(2)
在读取模式中,后台会自动完成下列处理:
以上过程相当于
var s1 = new String("some text") var s2 = s1.substring(2) s1 = null
所以你以为instanceof 读取这三种基本数据类型的时候会返回对象类型吗?too young too simple
var str = "some test"; str instanceof String; // false
说明 instanceof 运算符是直接访问的变量的元是值,因此instanceof 并不能用来判断五种基本类型的值
参考资料:Javascript 判断变量类型的陷阱 与 正确的处理方式
The text was updated successfully, but these errors were encountered:
No branches or pull requests
1. 先看下Javascript中有哪些数据类型
JS中的基本数据类型:
1. Undefined
2. Null
3. Boolean
4. Number
5. String
6. Symbol
复杂数据类型:Object;Array,Fuction, Object这些引用类型都是复杂数据类型
2. 方法一:typeof
typeof 操作符返回一个字符串,表示未经计算的操作数的类型
由上面可以看出,null,object,array返回的结果都是 object, 无法区分这三种,再看下第二种方法
3. 第二种:instanceof
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性
可以看出,第二种方法只能区分出 Array, 无法区分 Object
4. 第三种: constructor
当输入null 或者 undefined 时会抛出错误,所以需提前判断
如果涉及到原型链的继承,并不推荐
4. 第四种:Object.prototype.toString.call()
完美解决所有类型
5. 常见的类型判断
除Null之外的四种基本类型值的判断 Number, String, Boolean, Undefined,用typof 即可
Null类型的判断
6. 关于基本包装类
为了方便操作基本类型值,ECMAscript提供了3个特殊的引用类型:Boolean, Number, String。每当读取一个基本类型值时,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据
在读取模式中,后台会自动完成下列处理:
以上过程相当于
所以你以为instanceof 读取这三种基本数据类型的时候会返回对象类型吗?too young too simple
说明 instanceof 运算符是直接访问的变量的元是值,因此instanceof 并不能用来判断五种基本类型的值
参考资料:Javascript 判断变量类型的陷阱 与 正确的处理方式
The text was updated successfully, but these errors were encountered: