从什么时候开始 null.toString() 返回 [object Null]?

Jim*_*m-Y 5 javascript

我很好奇,因为我认为

Object.prototype.toString.call(null)
Run Code Online (Sandbox Code Playgroud)

返回[object Object],但现在我在 Chrome 和 FF 中检查,并且都返回了[object Null]。现在的问题是,我是否可以假设 Object.prototype.toString 总是会告诉我好的类型?

到目前为止,我正在使用此方法检查每种类型,但不是空值,我正在检查空值

obj === null;
Run Code Online (Sandbox Code Playgroud)

谢谢!


澄清说明:这个“问题”不是一个严重的情况,因为我正在使用 atm

function isNull(obj) {
  return obj === null;
}

function isUndefined(obj) {
  return typeof obj === 'undefined';  
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但如果Object.prototype.toString.call()将旧的浏览器工作充分,我可能会下降这两个功能,并延长我的解决方案nullundefined这样的:

Object.prototype.toString.call(null)
Run Code Online (Sandbox Code Playgroud)
obj === null;
Run Code Online (Sandbox Code Playgroud)

Ori*_*iol 4

这是在EcmaScript 5.1 第 15.2.4.2 节中定义的 -Object.prototype.toString()

调用该方法时toString,会执行以下步骤:

  1. 如果this值为undefined,则返回"[object Undefined]"
  2. 如果this值为null,则返回"[object Null]"
  3. 让是调用将值作为参数传递O的结果。ToObjectthis
  4. 让是 的内部属性class的值。[[Class]]O
  5. "[object "返回 String 值,该值是连接三个 String 、class和的结果"]"

EcmaScript 5对其定义有所不同:

调用该方法时toString,会执行以下步骤:

  1. 让是调用将值作为参数传递O的结果。ToObjectthis
  2. 让是 的内部属性class的值。[[Class]]O
  3. "[object "返回 String 值,该值是连接三个 String 、class和的结果"]"