继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JS灵巧判断7种类型的方式

跃然一笑
关注TA
已关注
手记 161
粉丝 40
获赞 164

1、空值 (null)
2、未定义 (undefined)
3、布尔值 (boolean)
4、数字 (number)
5、字符串 (string)
6、对象 (object)
7、符号 (symbol,ES6中新增)

1,可以使用 typeof 判断方式,如下:

typeof null         // "object"         <= 在后面文章里你会看到,巨坑!!!typeof undefined            // "undefined"typeof true         // "booleantypeof 42                       // "number"typeof "42"         // "string"typeof {life: 42}                // "object"typeof Symbol()     // "symbol"// ------------后面3种是单独提出来的注意事项------------------typeof void 0               // "undefined"      <= 这是一个非常实用的技巧,我将在后面解释;typeof [1,2,3]              // "object"         <= 数组 其实也是对象,巨坑!!!typeof function a() { } // "object"  <= 这里也需要注意!!!函数也是构造于 object

我们可以看到,这种判断方式虽说简单,但是太粗糙了,我们要判断对象具体的类型,则无能为力了。

2、巧用 !

我们要判断出 null  undefined  ,可以使用“!”来判断

!null              // true             <= 这是一个非常巧妙的技巧,下面将解释;!undefined     // true         <= 这是一个非常巧妙的技巧,下面将解释;------------我们不一样!!!------------
!123              // false!true             // false!{a: 123}         // false!function a() { }  // false!'123'            // false

注意:对象的boolean全是true

3、无敌法  “toString.call()”

Object.prototype.toString.call(null)        // "[object Null]"Object.prototype.toString.call(undefined)   // "[object Undefined]"Object.prototype.toString.call(123)         // "[object Number]"Object.prototype.toString.call(true)        // "[object Boolean]"Object.prototype.toString.call('123')       // "[object String]"Object.prototype.toString.call({a: 123})    // "[object Object]"Object.prototype.toString.call(Symbol())    // "[object Symbol]"// ---------------单独出来讲的几个注意事项---------------------Object.prototype.toString.call([1,2,3]) // "[object Array]"Object.prototype.toString.call(function a() { })    // "[object Function]" 其实函数也是object类型Object.prototype.toString.call(new Date)    // "[object Date]"  日期对象Object.prototype.toString.call(Math)        // [object Math]    数学函数对象Object.prototype.toString.call(function a() { })    // "[object Function]" 其实函数也是object类型

当然 Object.prototype.toString.call 也可以换成 Object.prototype.toString.apply
但是,你要知道,再厉害的绝技,也有他的命门所在。
他的命门就是:存在兼容性问题,具体兼容性问题点击这里 ,JavaScript 1.8.5,无法完全检测上述情况。

4、来看看 " constructor "吧

var n1 = null;
n.constructor             // 报错:因为 null 是 JS 原型链的起点,没有构造函数;var u = undefined;
u.constructor             // 报错:它也没有构造函数;var a = [1, 2, 3];
a.constructor === Array;   // true  数组var n = 123;
n.constructor === Number;  // true  数字var s1 = '123';
abc.constructor === String  // true 字符串var o = {a: 123};
o.constructor === Object;   // true 对象var s = Symbol()
abc.constructor === Symbol  // true 符号//------------------单独出来讲的几个注意事项----------------------var arr = [1, 2, 3];
arr.constructor === Array   // true 数组 能够很好地区分var fun = function a() { };
fun.constructor === Function  // true 函数var abc = new Date();
abc.constructor === Date;    // true 日期 var abc = new RegExp();
abc.constructor === RegExp; // true 正则 var abc = Mathabc.constructor === Math;   // false 不可以像Object.prototype.toString.call()一样区分;abc.constructor === Object   // true 事实上没有Math这个构造函数,Math的构造函数在 Object上的

[文章来源] :https://www.tuicool.com/articles/riABvmV?utm_medium=hao.caibaojian.com&utm_source=hao.caibaojian.com



作者:巩小白
链接:https://www.jianshu.com/p/47738149ed76


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP