2017-08-22 106 views
-2

我環顧四周,沒有發現任何人提出這個問題,我覺得有些令人驚訝。也許我只是失去了一些東西在這裏,但我有以下代碼:爲什麼三元運算符在javascript中未定義爲falsy?

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

這對我拋出

Uncaught ReferenceError: $type_cnts is not defined 

難道不應該$type_cnts未定義的事實使假,從而使三元運算符返回零?

+0

你可以發佈上下文代碼嗎? – clabe45

+4

'$ typec_cnts!== $ type_cnts'錯誤信息給你答案。 – spanky

+0

如果未定義,則不能使用三元運算符來檢測其是否存在,除非它是全局的,而不是使用點符號 – epascarello

回答

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,那麼你的代碼將不會引發錯誤。

+0

而你有錯字 – epascarello

+0

@epascarello在哪裏? – clabe45

+0

typec_counts應該是type_cnts。修正了上述問題。 –

相關問題