var num = 1234;
var str = "qwer";
var b = true;
var arr = [1,2,3];
var f = function(){
return "f";
}
var obj = {
a: 123,
b: {
c: "qwer",
d: {
rd: num
}
}
};
var n = null;
var u = undefined;
var s = Symbol("sym");
typeof判断
缺点:array和null对应的是object
console.log(typeof num);//"number"
console.log(typeof str);//"string"
console.log(typeof b);//"boolean"
console.log(typeof arr);//"object"
console.log(typeof f);//"function"
console.log(typeof obj);//"object"
console.log(typeof n);//"object"
console.log(typeof u);//"undefined"
console.log(typeof s);//"symbol"
instanceof判断变量是否为某个对象的实例
缺点:①字面量(即不用new)创建的number、string和boolean型无法正确检测
console.log(num instanceof Number);//false
console.log(str instanceof String);//false
console.log(b instanceof Boolean);//false
但是使用new形式创建出的三者结果均为true
var num1 = new Number(1234);
var str1 = new String("qwer");
var b1 = new Boolean(true);
console.log(num1 instanceof Number);//true
console.log(str1 instanceof String);//true
console.log(b1 instanceof Boolean);//true
②null、undefined和symbol无法正确检测
console.log(n instanceof Object);//false
console.log(u instanceof Object);//false
console.log(s instanceof Symbol);//false
但是可以将s再用new的形式创建出来,可以正确检测。这点后续要深挖啊,感觉symbol是个大坑 = =
var s1 = new Object(s);
console.log(s1 instanceof Symbol);//true
其他都是可以通过这种方式进行检测的~感觉也没剩下啥了 = =
console.log(arr.constructor === Array);//true
console.log(f.constructor === Function);//true
console.log(obj.constructor === Object);//true
constructor构造函数检测法
缺点:①null和undefined会报错,无法使用这种方法
console.log(n.constructor === Object);//出错
console.log(u.constructor === Object);//出错
②不保险,因为可以被随意更改
在不被更改的原始情况下,其他的还是蛮好用的~
console.log(num.constructor === Number);//true
console.log(str.constructor === String);//true
console.log(b.constructor === Boolean);//true
console.log(arr.constructor === Array);//true
console.log(f.constructor === Function);//true
console.log(obj.constructor === Object);//true
console.log(s.constructor === Symbol);//true
Object.prototype.toString.call()最好用
缺点:可能就是没有缺点吧
console.log(Object.prototype.toString.call(num));//"[object Number]"
console.log(Object.prototype.toString.call(str));//"[object String]"
console.log(Object.prototype.toString.call(b));//"[object Boolean]"
console.log(Object.prototype.toString.call(arr));//"[object Array]"
console.log(Object.prototype.toString.call(f));//"[object Function]"
console.log(Object.prototype.toString.call(obj));//"[object Object]"
console.log(Object.prototype.toString.call(n));//"[object Null]"
console.log(Object.prototype.toString.call(u));//"[object Undefined]"
console.log(Object.prototype.toString.call(s));//"[object Symbol]"