程序员

javascript深入理解系列(十)——判断基本类型的方法ty

2018-10-07  本文已影响6人  悦者生存

javascript深入理解系列文章网址
https://www.jianshu.com/p/451eed9094f5

1.typeof(能判断6种类型)

typeof其实就是判断参数是什么类型的实例,就一个参数

typeof 一般只能返回如下几个结果(一共六个):

"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。(这些值都是小写)
(温馨提示:此处要和js的数据类型区别开)
js的简单数据类型:string,number,boolean,null,undefined
js的复杂数据类型:object
运算数为数字 typeof(x) = "number" 

字符串 typeof(x) = "string" 

布尔值 typeof(x) = "boolean" 

特别注意**对象,数组和null typeof(x) = "object"**(因为null和数组都属于对象) 

函数 typeof(x) = "function" 

2.instanceof

要知道使用typeof判断array,null都会返回"object",所以这个时候可以使用instanceof判断
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。(直白点说就是判断左边的值是否是右边对象的实例)


例如:var a=[1,2];

a instanceof Array则为true

因为console.log(a.__proto__===Array.prototype);为true所以上面为true
其实也就是判定a是Array的实例

3.Object.prototype.toString.call(value)(至少14中类型)

1.判断基本类型:(输出的值是字符串,并且用中括号括起来,左边是object(小写),右边是类型(首字母大写))


Object.prototype.toString.call(null);//”[object Null]”
Object.prototype.toString.call(undefined);//”[object Undefined]”
Object.prototype.toString.call(“abc”);//”[object String]”
Object.prototype.toString.call(123);//”[object Number]”
Object.prototype.toString.call(true);//”[object Boolean]”

2.判断原生引用类型:

函数类型
Function fn(){console.log(“test”);}
Object.prototype.toString.call(fn);//”[object Function]”
日期类型
var date = new Date();
Object.prototype.toString.call(date);//”[object Date]”
数组类型
var arr = [1,2,3];
Object.prototype.toString.call(arr);//”[object Array]”
正则表达式
var reg = /[hbc]at/gi;
Object.prototype.toString.call(arr);//”[object Array]”
自定义类型
function Person(name, age) {
    this.name = name;
    this.age = age;
}
var person = new Person("Rose", 18);
Object.prototype.toString.call(arr); //”[object Object]”
**很明显这种方法不能准确判断person是Person类的实例,而只能用instanceof 操作符来进行判断,如下所示:
console.log(person instanceof Person);//输出结果为true**

3.判断原生JSON对象:

var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);
console.log(isNativeJSON);//输出结果为”[object JSON]”说明JSON是原生的,否则不是;
注意:Object.prototype.toString()本身是允许被修改的,而我们目前所讨论的关于Object.prototype.toString()这个方法的应用都是假设toString()方法未被修改为前提的。

参考:http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-02-28/271.html

上一篇 下一篇

猜你喜欢

热点阅读