在 javascript 变量声明中使用逻辑 AND
Using Logical AND in Javascript Variable Declarations
我对使用这样的&&
声明变量的实际应用感兴趣:
var x = undefined && 4;
// Evaluate to the first falsey value
// or else the last value.
eval(x);
// undefined
我了解如何评估该值(请参阅此 SO 答案(。我也了解它的姊妹||
(有关精彩描述,请参阅此处(以及为什么使用以下表达式声明变量很有用:
// Some other variable
var y;
var x = y || 4;
// Evaluate to the first truthy value
// or else the last value.
实际上:使用第一个值,除非第一个值为假;如果是,请使用最后一个值。我们可以在浏览器控制台中演示||
的这一特征:
> null || 4
4
> 4 || null
4
> null || undefined
undefined
> undefined || null
null
> true || 4
true
> 4 || true
4
至于&&
:
> null && 4
null
> 4 && null
null
> null && undefined
null
> undefined && null
undefined
> true && 4
4
> 4 && true
true
我们是否应该理解为:除非第一个值为真值,否则使用第一个值;如果是这样,请使用最后一个值?
我对使用编码快捷方式来最小化条件语句的使用感兴趣,我想知道我是否能够以某种方式使用这个。
我在 jQuery 核心源代码的第 472 行中找到了这种编码方法的示例:
scripts = !keepScripts && [];
所以问题是:任何人都可以描述在javascript变量声明中使用&&
的良好上下文吗?你认为这是不好的做法吗?
谢谢!
一般来说,只有当这样的"快捷方式"使代码对于典型的JavaScript程序员来说比替代方案更具可读性时,你才应该使用这样的"快捷方式"。
在考虑什么更具可读性且不那么令人惊讶时,请考虑一下
var foo;
if(bar) {
foo=[];
}
和
var foo = bar && [];
不一样。 例如,如果bar
是NaN
,那么foo
将在后一种情况下NaN
,这在以后可能会有点令人头疼。
由于有优化/最小化JavaScript的工具,你应该关注代码的可读性,这并不总是与简洁性是一回事。
假设您连续进行了几次这样的重复初始化,它们都依赖于不同的变量(因此它们不能包装到单个条件中(,但遵循相同的逻辑公式。 在这种情况下,一旦读者在脑海中解析了公式的含义,他们就可以快速扫描所有实例并查看每个实例之间的差异。 在这种情况下,您不是依赖于大多数 JavaScript 程序员熟悉的约定(例如 var foo = some_opt || {}
(,而是创建一个本地化的约定,读者必须只为这个文件学习。 即使在这种情况下,我也建议仔细考虑,这可能不值得。
我发现了一种特定情况,在这种情况下,在调试过程中使用&&
很有用。
假设我们有一个变量x
。有时x
的值为 null
,有时 x
是值为 {'foo':'bar'}
的对象。我们要编写一个表达式,返回 x.foo
的值(如果存在(。
但是,我们必须小心。调用不存在的对象的属性可能会导致以下结果:
> Uncaught TypeError: Cannot read property 'foo' of null
所以我们可以这样写:
x && x.foo
它执行以下操作:
如果
x
是一个对象并且x.foo
存在,请给我们x.foo
的值。如果
x
是对象而x.foo
不存在,则返回undefined
。如果
x
为空,则返回null
。
只要某处提到了x
(即使x
只是设置为 null 或未定义(,表达式就不应该破坏代码。
实际上,你不应该像Jquery那样经常使用&&operator,因为它总是有风险的代码。您可能会忘记自己做了什么,或者由于这种用法,您可能找不到错误。我个人认为这是一种不好的做法。您可能更喜欢使用,但代码变得不可读。我们开发人员应该考虑代码的可理解性和可读性。
嗯,这是一个常见的习语,但也许它会降低你的代码的可读性。所以,我的建议是,保持简单,即使这意味着更多的击键。
- Selenium WebDriver and JavaScript change
- PHP and Javascript functions
- lightbox in html 5 and javascript
- iframe and JavaScript on different pages
- JSON and javascript objects
- Python and Javascript
- HTML and javascript colab
- Remote json and Javascript
- ASP.net and Javascript confirmation
- Differentiate jquery and javascript
- Python 3, Web-scraping, and Javascript [Oh My]
- Cookies is html and javascript
- Razor foreach loop and javascript
- lightbox, css and javascript
- JQuery .extend() and Javascript class
- Shopify (.liquid) and JavaScript
- Handlebars and Javascript
- Selenium with C# and Javascript
- flask forms and javascript
- HMAC C# and JavaScript