Javascript 哪些真实值没有属性?

Javascript 哪些真实值没有属性?,javascript,null,undefined,optional-chaining,Javascript,Null,Undefined,Optional Chaining,我正在尝试编写最短的可读代码,以访问我没有任何信息的变量的属性,但我希望此属性访问是安全的: const x=getXSomehow(); 常数y=x.z;//1. 常数y=x?.z;//2. 常数y=x!=null&&x.z;//3. 常数y=x&&x.z;//4. 如果x为null或未定义 这将是完美的,但我不能使用可选链接(由于某些原因超出了这个问题的范围) Works&其他库(如lodash和coffeescript)使用它以空安全的方式访问道具,但读起来很难看 我想使用它,但是如果J

我正在尝试编写最短的可读代码,以访问我没有任何信息的变量的属性,但我希望此属性访问是安全的:

const x=getXSomehow();
常数y=x.z;//1.
常数y=x?.z;//2.
常数y=x!=null&&x.z;//3.
常数y=x&&x.z;//4.
  • 如果
    x
    null
    未定义
  • 这将是完美的,但我不能使用可选链接(由于某些原因超出了这个问题的范围)
  • Works&其他库(如lodash和coffeescript)使用它以空安全的方式访问道具,但读起来很难看
  • 我想使用它,但是如果JS中存在一些truthy不允许您访问其属性的东西,那么它就会失败——这会发生吗?我能想到的就是
    null
    未定义的
    ,但可能存在一个奇特的JS值,它既真实又对属性访问有影响
  • 如果JS中存在truthy不允许您访问其属性的东西,那么这将失败——这会发生吗

    它可以,但它会很奇怪-就像一个可能抛出:

    const obj={
    获取道具(){
    抛出新错误();
    }
    };
    
    控制台日志(对象道具)我会仔细看看2。如果浏览器兼容性是个问题,您能否将Babel集成到您的构建过程中(无论如何,它应该已经存在于一个相当专业的项目IMO中),然后使用可选链接,并将其传输到ES5/ES2015进行生产?(如果不是,好吧,但我会这么做)不,这是babel+jest+istanbul的问题,它不处理可选链接,我的意思是理论上可以,但我们的团队集体认为这项工作成本太高!但如果不是因为这个细节,我会同意的