_.isObject = function (obj) {
var type = typeof obj;
return type === 'function' || type === 'object' && !!obj;
};
判断是否是对象
其中!!obj
是为了验证什么?
1
royzxq 2017-08-30 10:34:57 +08:00
null 也是 object.
|
2
Zegendary 2017-08-30 10:54:23 +08:00
typeof null === 'object' 所以你懂的
|
3
bombless 2017-08-30 11:08:14 +08:00 via Android
!!多余了
|
4
bombless 2017-08-30 11:08:50 +08:00 via Android
啊搞错,这里应该是有意返回布尔值
|
5
fulvaz 2017-08-30 11:12:25 +08:00 via iPhone
楼主在研究 lodash 吗?
|
6
learnshare 2017-08-30 11:24:55 +08:00
>typeof null
<"object" >!null <true >!!null <false >!{} <false >!!{} <true |
7
dongliangnerd 2017-08-30 11:27:48 +08:00
为了排除 null,以为 typeof null === 'object'。应该是 underscore 的源码
|
8
autoxbc 2017-08-30 12:32:51 +08:00
这代码是有问题的,至少需要设定一个前提
一般不简单的说一个东西是否是对象,因为 js 里万物皆对象 最好说,基本类型,基本包装类型,引用类型 取决于你怎么看基本包装类型 typeof 可能并不可靠 typeof 123 // "number" typeof new Number(123) // "object" 框架里一般会用这个方法判断 Object.prototype.toString.call(123) // "[object Number]" Object.prototype.toString.call(new Number(123)) // "[object Number]" |
9
dongliangnerd 2017-08-30 12:49:59 +08:00
@autoxbc 如果
|
10
dongliangnerd 2017-08-30 12:51:18 +08:00
@autoxbc
如果出现了 new Number(123) 才是最大的问题。 下面是 lodash 的源码 function isObject(value) { const type = typeof value return value != null && (type == 'object' || type == 'function') } |
11
zhlssg 2017-08-30 12:52:22 +08:00 via iPhone
所以直接用 tostring 好了,省了那么多坑
|
12
opengps 2017-08-30 12:57:48 +08:00
为啥不先搜搜,我就是刚学会了!!的意义,算是强制识别成 bool 类型
|
13
m31271n 2017-08-30 13:40:17 +08:00
`type === 'object' && !!obj` 是为了验证 obj 不是 `null`。刚好前阵子总结了一次 JS 的类型检测 https://blog.m31271n.com/2016/10/02/ES-%E5%9F%BA%E7%A1%80-%E2%80%94%E2%80%94-%E7%B1%BB%E5%9E%8B%E6%A3%80%E6%B5%8B/ ,希望对你有所帮助。
|
14
meepo3927 2017-08-30 14:22:29 +08:00
!! 强制转换成布尔型
|