Skip to content
New issue

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

JavaScript怎么进行类型判断? #28

Open
fwon opened this issue Mar 1, 2017 · 0 comments
Open

JavaScript怎么进行类型判断? #28

fwon opened this issue Mar 1, 2017 · 0 comments

Comments

@fwon
Copy link
Owner

fwon commented Mar 1, 2017

JavaScript有7种内置类型:

roadmap.path

typeof
typeof 运算符用来查看 内置类型,它返回的是类型的字符串值,但是这七中类型和它们的字符串值并不一一对应。

其中
typeof null == "object" 而不是 "null", 这可以简单理解为JavaScript的一个陈年bug。另外还有一个"function"类型,但是实际上function不是一种内置类型,它只是object的一个子类型。可能为了方便而引入的一个feature。实际使用中typeof的功能还是很鸡肋的。

roadmap.path

instanceof
instanceof 用来判断 变量引用类型,引用类型通常是通过new一个构造函数生成的,如new String(),new Array()...

roadmap.path

如果你用typeof判断由上面引用类型new出来的变量,将统一得到"object"。因为这些引用类型的基本类型都是继承自Object。

var arr = new Array();
arr instanceof Array; //true
arr instanceof Object; //true
typeof arr; //"object"
"abc" instanceof String; //false

所以instanceof是用来判断某个变量是否为构造函数的实例。通常我们需要自己封装一个方法来判断我们最终的值是什么类型的,并在业务中做进一步操作。下面是一种封装的方法。

Object.prototype.toString
Object 引用对象内置了toString方法,不管对于基本类型值还是构造函数生成的引用类型值,都能正确地返回其类型,我们可以这么来封装一个对象判断方法。

function isType(type) {
  return function(obj) {
    return Object.prototype.toString.call(obj) == "[object " + type + "]"
  }
}

var isObject = isType("Object")
var isString = isType("String")
var isArray = Array.isArray || isType("Array")
var isFunction = isType("Function")
var isUndefined = isType("Undefined")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant