它似乎不是抽象对象或对象文字。
我用以下值测试了isObject() from underscore:
var falsy = [
false,
'', "",
0, -0,
undefined, null,
NaN
],
// 6 truthy
truthy = [
true,
'hello',
-1, 1,
Infinity,
/test/
],
// 3 lengthy
lengthy = [
function () {
return undefined;
},
"string",
[0]
],
// 8 globals
globals = [
new String(),
new Number(),
new Boolean(),
new Array(),
new Object(),
new Function(),
new Date(),
new RegExp()
],
all = falsy.concat(truthy, lengthy, globals),
我用光了
这就是我从控制台获得的信息。
我发现最奇怪的是,未将字符串检测为对象,因为它显然不是基本/原始类型,并且可以保存属性。
这似乎是
isObject()
的脆弱实现。如果事实上这件事在做什么?
最佳答案
实际上,它只是为true
返回Objects
,为false
返回primitives
。
JavaScript具有5 primitives:
undefined, null, boolean, string and number
但是,该语言还具有其中一些原语的对象版本,例如字符串,数字。因此
"foo"
是原始元素,而new String("bar")
是对象。原始语和对象之间的差异通常被以下事实隐藏:JavaScript使用强制将原始语自动转换为对象,并在必要时将对象转换为原始语。
关于javascript - isObject测试到底是为了什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19813875/