gpt4 book ai didi

javascript - 使用 null 作为预期对象

转载 作者:行者123 更新时间:2023-11-30 11:55:51 25 4
gpt4 key购买 nike

The value null represents the intentional absence of any object value.

In APIs, null is often retrieved in place where an object can be expected but no object is relevant.

MDN (emphasis mine)

长话短说:Why does null.content throw an error but false.content returns undefined ?

在我项目的 API 中,我有一些方法允许用户设置和获取页面的图标。

Page.prototype.setIcon = function (key) {
this.icon = database.find(function (item) { return item.content === key })
}
Page.prototype.getIconContent = function () {
return this.icon.content
}

给定一个字符串作为参数,程序在数据库中搜索 content 的对象。属性等于给定的参数。如果没有找到这样的对象,the find() function will return undefined .所以this.icon将设置为 undefined .

这不好,因为当用户调用 getIconContent() 时,他们将收到错误,因为程序正在尝试查找 content undefined的属性(property).

我想要发生的是,如果在数据库中没有找到这样的对象,setIcon()将设置 this.icon尝试获取 content不会抛出错误的虚假值属性(property)。所以我尝试使用 OR null , 作为 it is an object .

Page.prototype.setIcon = function (key) {
this.icon = database.find(function (item) { return item.content === key }) || null
}

但这没有用,因为试图获得 null.content 仍然会抛出错误。然后我尝试了 OR false它按照我想要的方式工作。

Page.prototype.setIcon = function (key) {
this.icon = database.find(function (item) { return item.content === key }) || false
}

所以当用户调用 setIcon()没有参数,然后尝试 getIconContent() ,他们不会收到错误,因为 false.content不会抛出错误;它返回 undefined ,这是我正在寻找的行为。

我的问题是,为什么 false正确的用法,当明确 icon 的预期类型时应该是一个对象?我会想 null会更“语义正确”,但会引发错误。


PS:除了false ,这些是其他不会引发错误的虚假值:

var a = 0;   a.content // returns `undefined`
var b = NaN; b.content // returns `undefined`
var c = ''; c.content // returns `undefined`

空对象 {} , 即使它是真实的

var d = {}; d.content // returns `undefined`

undefined按预期抛出错误

var e; e.content // throws an error "Uncaught ReferenceError: e is not defined"

最佳答案

null 的技巧在于,虽然 typeof null === 'object'null 本身实际上是它自己的原语类型.参见 this question进行更深入的讨论,包括相关规范的摘录。

null 是在期望对象时返回的有效内容,但消费者有责任检查返回值是否为 null 值。对于出错的情况,只需查看标签 以及有关处理该场景的众多问题。

是否应该从 getIcon 方法返回 nullundefined 或其他一些值实际上是一个设计问题,很容易意见而不是事实,所以我不会提供我的观点。

关于javascript - 使用 null 作为预期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com