Javascript - 如果语句同时检查表达式和定义声明?这是令人困惑的
Javascript - If statements check both expression and definition declaration? This is confusing
var boolTrue = true;
var randomObject;
if (boolTrue)
// this will fire
if (randomObject)
// this will fire, because the object is defined
if (!objectNotDefined)
// this will fire, because there is no defined object named 'objectNotDefined'
来自C++和C#背景,我非常熟悉基本的if(表达式(语法。 但是,我认为同时具有表达式(真/假(并且将对象存在也作为表达式的可读性不是很好。 因为现在如果我看到如下所示的函数,我不知道传入的数据是对象(存在/未定义的检查(还是布尔值。
function(data) {
if (data)
// is this checking if the object is true/false or if the object is in existence?
}
事实就是这样吗? 我的意思是,有没有办法轻松阅读这个? 另外,这在JS规范中的任何地方都记录在哪里(好奇(?
在Javascript中,除了false
、0
、undefined
、null
、NaN
和空字符串之外,一切都是"真实的"(或者更准确地说是"真实的">
为避免混淆,请使用:
if (data === true) // Is it really true?
和
if (typeof data === 'undefined') // Is the variable undefined?
您可以单独检查(不存在(存在:
if ( typeof variable == 'undefined' ) {
// other code
}
但是,您显示的语法通常用作更短的形式,并且在大多数用例中就足够了。
以下值等效于条件语句中的 false:
false
null
undefined
The empty string ”
The number 0
The number NaN
它检查它是否真实。
在 JavaScript 中,除了 false
、0
、""
、undefined
、null
和NaN
之外,一切都是真实的。
因此,true
将传递,以及任何对象(也是空对象/数组/等(。
请注意,如果您的意思是"已声明但未定义",则您的第三条注释为真 - 从未声明的变量会在访问时引发ReferenceError
。一个声明的,未定义的变量(var something;
(是undefined
的(所以,不是真实的(,所以如果你否定它,它确实会通过条件。
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 在setInterval函数之前声明时未定义对象
- 我们可以在初始化variable Angular JS时将变量值声明为未定义吗
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- 函数声明未定义-原因
- DOJO 引用错误:未定义声明
- 如何区分未声明和未定义的 JavaScript 对象属性
- 为什么JS类内部声明的变量是“未定义的”
- "无法读取属性'id'未定义的“;解析工厂中声明的数组时
- 如果声明防止漫画被放置在预先定义的区域之外
- Typescript定义:如何在类内部声明类
- 属性初始值设定项在声明之前未定义
- Dojo:用Options以声明方式定义类似Select的小部件
- 为什么Javascript代码打印'未定义'即使变量被声明为全局变量
- 为什么来自.getJSON的名称在声明为列表(JavaScript / JQuery)的索引后仍未定义
- AngularJS:当我已经声明$scope时,获取$scope不是定义的错误
- JavaScript函数的类型是在声明函数之前定义的
- 声明后立即未定义的变量
- 如何在打字稿中声明 NPM 的模块公共类型定义
- 从外部文件在打字稿中声明变量得到引用错误:..未定义