它似乎不是抽象对象或对象文字。
我使用以下值测试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()
的脆弱实现。
如果事实是这样做会怎么样?
答案 0 :(得分:0)
事实上,它只为true
返回Objects
,为false
返回primitives
。
Javascript有5 primitives:
undefined, null, boolean, string and number
但是,该语言还具有某些这些原语的Object版本,例如String,Number。所以"foo"
是原始的,但new String("bar")
是一个对象。
基元和对象之间的区别通常被javascript使用强制自动将基元转换为对象并在必要时将对象转换为基元这一事实隐藏。