这是一系列关于JavaScript中语法的问题.这也是社区Wiki,因此邀请每个人参与维护此列表.
Stack Overflow不允许搜索特定字符.因此,在搜索运算符和其他语法标记时,很难找到许多关于运算符和其他语法标记的问题.这也使得关闭重复更加困难.以下列表是为了解决此问题.
主要思想是在Stack Overflow上链接现有问题,因此我们更容易引用它们,而不是复制ECMAScript规范中的内容.
此外,这是PHP符号引用的公然副本.我们需要一个JS.
请帮忙.编辑并添加指向其他运算符/语法参考的链接,或者如果您无法在特定语法上找到好的问题/答案,请添加此问题的答案并将其链接
我之前问了这个问题,在仔细考虑了这个话题之后,我开始想知道"陈述"和"表达"这两个词之间看似模糊的界限在哪里.所有陈述都是表达式吗?REPL控制台中的返回值来自哪里?它们似乎并不总是具有直观意义.当然,如果你输入1+1,你会得到2,但有时候它的逻辑并不明显.
鉴于在REPL中输入的任何内容都会产生一些价值,这是否意味着它可以在JS源代码中用作表达式和独立语句?
可以_X_在以下代码段中使用的代码串也可用于_Y_反之亦然?if(_X_) _Y_
这条线parent && (this.parent.next = this);是什么意思?它只是看起来像坐在那里,什么也不做,不是if声明或承诺或任何东西.这种编码风格有名称吗?
var Particle = function(i, parent)
{
this.next = null;
this.parent = parent;
parent && (this.parent.next = this);
this.img = new Image();
this.img.src = "http://www.dhteumeuleu.com/images/cloud_01.gif";
this.speed = speed / this.radius;
}
Run Code Online (Sandbox Code Playgroud)
它在我正在看的动画文件的多个地方.这是另一个例子..(!touch && document.setCapture) && document.setCapture();
this.down = function(e, touch)
{
e.preventDefault();
var pointer = touch ? e.touches[0] : e;
(!touch && document.setCapture) && document.setCapture();
this.pointer.x = pointer.clientX;
this.pointer.y = pointer.clientY;
this.pointer.isDown = true;
Run Code Online (Sandbox Code Playgroud) 据我所知,逻辑AND &&运算符的短路效果如下:
假设我有表达a并且b然后a && b是一样的a ? b : a,因为
如果a是真的那么结果将是b,如果a是假的那么结果将是a(甚至没有试图解决b)
这就是为什么以下(演示)代码抛出一个SyntaxError:
var add = function(a,b) {
b && return a+b; // if(b) return a+b
...
}
Run Code Online (Sandbox Code Playgroud)
有没有办法与return语句短路?
以下两个片段之间是否存在任何差异,或者是否有任何理由使用其中一个?
if (foo) {
bar();
}
Run Code Online (Sandbox Code Playgroud)
foo && bar();
Run Code Online (Sandbox Code Playgroud) 这应该是一个非常简单的问题,我无法在任何地方找到答案,所以以为我会节省一些时间并在这里问一下.
我正在查看一些javascript代码并注意到表单的表达式:
a < b && (other maths statements);
Run Code Online (Sandbox Code Playgroud)
其他数学语句只是分配变量和简单的东西.
我的问题是这个.这是编写紧凑if语句的另一种方法吗?
我知道那句话吗?if-block:else-block; 是一种方法,但由于&&是短路和左关联,这是我能想到的全部.我知道你不能用这种方法阻止其他方法,但它非常整洁.
有人可以在早上的这个时候确认我醒了吗.
谢谢,
所以我正在阅读Airbnb的JS样式指南,我不明白OR运算符在下面的例子中做了什么.更具体地说,在Jedy构造options || (options = {});函数中,如果没有将参数传递给构造函数,那么基本上是创建一个空对象吗?因此,nameJedi构造函数的属性将设置为'no name'?
function Jedi(options) {
options || (options = {});
this.name = options.name || 'no name';
}
Jedi.prototype.getName = function getName() {
return this.name;
};
Jedi.prototype.toString = function toString() {
return 'Jedi - ' + this.getName();
};
Run Code Online (Sandbox Code Playgroud)
PS.似乎有很多简单的方法用JS做事.是否有任何好的资源或文章解释这些是什么以及什么时候最好使用它们?