为什么没有三元运算符在javascript中使用undefined as falsy?

时间:2017-08-22 18:13:47

标签: javascript

我环顾四周,并没有找到任何人提出这个问题,我觉得有点令人惊讶。也许我在这里遗漏了一些东西,但我有以下代码:

return $type_cnts ? JSON.parse($type_cnts)[premType] : 0;

我的投掷

Uncaught ReferenceError: $type_cnts is not defined

不应该$type_cnts未定义的事实使其成为假,从而使三元运算符返回零?

1 个答案:

答案 0 :(得分:1)

不,当您尝试访问它们时,未声明的变量会抛出ReferenceError。但是,如果声明变量没有值,

var $type_cnts;

那么你的三元运算符会起作用:

$type_cnts ? JSON.parse($type_cnts)[premType] : 0; // 0

此外,当您尝试访问对象时,未定义的对象属性不会抛出错误(常识)。这适用于window对象,因此如果您将代码更改为

window.$type_cnts ? JSON.parse($type_cnts)[premType] : 0;  // no error

甚至没有声明$type_cnts,那么你的代码就不会抛出错误。