javascript - 为什么 b ['x' ] || 0 当 x || 时求值0 没有...并且两者都是未定义的?

标签 javascript node.js

: a = {a: 1, b: 2}
    Object {a: 1, b: 2}

: b = {a: 0, b: a['c'] || 0}
    Object {a: 0, b: 0}

: c = {a: 0, b: d || 0}
    ReferenceError: d is not defined

: a['c']
    undefined

我想我是在问未定义未定义之间有什么区别?

这是处理这种情况的正确方法吗?

return {
            resLength : retRes.length,
            id : (typeof browser.id === 'undefined') ? 0 : browser.id,
       }

最佳答案

这只是语言语义的问题。访问不存在的对象属性的计算结果为未定义。访问不存在的变量会引发ReferenceError

该语言可以设计为访问不存在的变量,其计算结果为未定义,但谢天谢地,事实并非如此。

它也可以被设计为访问不存在的对象属性会引发 PropertyReferenceError 或其他错误,但事实并非如此。

<小时/>

顺便说一句,要检查变量是否已定义,可以检查是否typeof varname === 'undefined'。这是另一个约定 - 您可以将不存在的变量粘贴在 typeof 中,并且 typeof 将计算为 'undefined' 而不是抛出 ReferenceError

如果您位于全局范围内,您还可以检查是否 this.varname === undefined,因为此时属性访问规则适用。

关于javascript - 为什么 b ['x' ] || 0 当 x || 时求值0 没有...并且两者都是未定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076575/

相关文章:

javascript - 使用客户端凭据流程刷新 Spotify token

javascript - 如何在 Canvas 上增加/减少这个心形的大小?

javascript - 清除欧芹js中的从属字段错误

javascript - 通过 javascript 创建新的 javascript 代码

node.js - 带有身份验证错误的 MongoDB Atlas 集群连接问题

javascript - 为什么我的 promise 返回未定义?

javascript - react-fullpage - 避免渲染中的 setState 无限循环

javascript - JS 对象 : Iteration till nth level

javascript - 通过 Node.js 使用未知数量的空参数进行 MySQL 查询

Node.js - 将多个文件作为附件从服务器推送到客户端