在前端开发中,我们经常需要进行变量赋值的操作。而在 JavaScript 中,我们可以使用 =
进行简单的赋值操作,也可以使用 +=
、 -=
和 *=
等运算符进行复合赋值操作。除此之外,还有一种比较特殊的赋值方式,即使用双与号(&&
)进行赋值操作。
双与号赋值
在 JavaScript 中,双与号(&&
)是逻辑 AND 运算符。当两个操作数都为真时,它返回真;否则返回假。但是,在使用双与号进行变量赋值时,它具有一定的特殊性质。
例如:
let a = 1; let b = 2; a && (a = b); console.log(a); // 输出 2
在上面的代码中,首先定义了两个变量 a
和 b
,并将 a
的初始值设置为 1。然后,通过使用双与号,将表达式 a = b
嵌入其中。由于 a
的初始值为真,因此 a && (a = b)
这个表达式的求值结果为 (a = b)
。这样,就实现了将 b
的值赋给 a
的操作。
需要注意的是,如果 a
的初始值为假,那么 (a = b)
这个表达式将不会被执行。例如:
let a = 0; let b = 2; a && (a = b); console.log(a); // 输出 0
在上面的代码中,a
的初始值为 0,因此 a && (a = b)
这个表达式的求值结果为 0,因此 (a = b)
不会被执行。
双与号赋值的应用场景
双与号赋值虽然看起来比较神奇,但是它有一些实用的应用场景。
防止变量为空时的错误操作
在 JavaScript 中,如果一个变量的值为 null 或 undefined,那么在对它进行属性访问或方法调用时,就会抛出 TypeError 的错误。为了避免这种错误的发生,我们可以使用双与号赋值的方式来实现对变量进行检查和赋值的操作。
例如:
let obj = {}; obj && (obj.name = 'John'); console.log(obj.name); // 输出 John
在上面的代码中,首先定义了一个空对象 obj
,然后使用双与号赋值的方式,将属性 name
赋值给 obj
。由于 obj
的初始值为真,因此 (obj.name = 'John')
这个表达式被执行了,从而实现了对 obj.name
的赋值操作。
如果没有使用双与号赋值的方式,代码将会报错:
let obj = null; obj.name = 'John'; // TypeError: Cannot set property 'name' of null
简化条件语句
我们经常需要在 JavaScript 中进行一些复杂的条件判断操作。而使用双与号赋值可以简化这些操作。
例如:
-- -------------------- ---- ------- --- - - -- --- -- -- -- --- -- - - - -- - ---- - - - -- - --------------- -- -- -
在这段代码中,首先定义了一个变量 a
,并将其初始值设置为 1。然后,通过 if 语句对 a
的值进行判断,并将结果赋给变量 b
。使用双与号赋值的方式可以大大简化这个过程:
let a = 1; let b; b = a === 1 && 2 || 3; console.log > 来源:[JavaScript中文网](https://www.javascriptcn.com/post/31044) ,转载请注明来源 [https://www.javascriptcn.com/post/31044](https://www.javascriptcn.com/post/31044)