Chrome、Firefox 和 Safari 中的控制台对象值差异
在 JavaScript 中,对象通过引用存储,这意味着 console.log 调用使用对象参数记录对象引用。在控制台中查看对象时,这可能会导致令人惊讶的行为。
在 Firefox 的 Firebug 中,记录对象始终显示正确的值:
Object { bar=1111 } 1111 Object { bar=2222 } 2222
但是,在 Chrome 和 Safari 的控制台中,观察到不同的行为:
Object { bar=2222 } // Object shows updated value 1111 // Attribute value remains unchanged Object { bar=2222 } // Object shows updated value 2222 // Attribute value is correct
这种不一致源于 Chrome(和 Safari,因为它使用 WebKit)在第一次 console.log 调用后缓存对象的设计决策。缓存的值将用于所有后续的 console.log 调用,即使对象同时更新。
为了避免这种混乱,建议使用非对象方法来记录对象值,例如:
console.log(JSON.stringify(foo)); // Serializes the object into a JSON string
或者,您可以使用 Chrome 的 toJSON 和 valueOf 方法,它们提供类似的功能:
console.log(foo.toJSON()); // Invokes the object's `toJSON` method (if defined) console.log(foo.valueOf()); // Invokes the object's `valueOf` method (if defined)
通过使用这些技术,您可以确保控制台中显示的值是与物体的实际状态一致。
以上是为什么控制台日志在 Chrome、Firefox 和 Safari 中显示不同的值?的详细内容。更多信息请关注PHP中文网其他相关文章!