详解javascript中逻辑运算符
推荐教程:《JavaScript视频教程》
逻辑赋值是对现有数学和二进制逻辑运算符的扩展。我们先复习一下,然后看看把它们结合在一起能得到什么。
首先,我们来看下 JS 中条件运算符
与无条件运算符
之间的区别。
无条件 vs 有条件
数学运算符,例如 +
是无条件的。
在const x = 1 + 2
中,无论如何,我们总是将LHS
添加到RHS
中,并将结果分配给x
。
LHS 和 RHS 是数学领域内的概念,意为等式左边和等式右边的意思,在我们现在的场景下就是赋值操作符的左侧和右侧。当变量出现在赋值操作符的左边时,就进行 LHS 查询;反之进行 RHS 查询。
我们甚至可以编写一些奇怪的代码,例如const x = false +2
。JS 首先将false
的 LHS 转换为Number
,因此得到const x = Number(false)+ 2
,其结果为const x = 0 + 2
。 它将 LHS 添加到RHS,最后将其分配给x
,得出2
。
逻辑运算符,例如 &&
是有条件的
在const x = true && 0 + 2
中,首先计算 LHS,它为true
。因为 LHS 的值为true
,所以我们接下来运行 RHS 操作,它的值为2,同时也运行赋值操作,结果是2
。
与const x = false && 0 + 2
相比,LHS 为 false
,因此 RHS 被完全忽略。
你可能想知道为什么要避免计算RHS? 两个常见的原因是获得更好的性能和避免副作用
。
二元逻辑运算符
&& || ??
在 JSX 中我们经常使用&&
和||
来有条件地渲染界面。??
是nullish(空值)
合并运算符,它是最近刚通过提案的,很快就会普及。它们都是 二元逻辑运算符。
- 使用
&&
测试 LHS 的结果是否是真值。 - 使用
||
测试 LHS 的结果是否是虚值。 - 用
??
测试 LHS 是否无效。
虚值 vs Nullish
在 JS 中有哪些算是虚值呢?
- null
- undefined
- false
- NaN
- 0
- "" (空字符串)
下面这两姐妹被认为是 nullish 值。
- null
- undefined
值得注意的是,使用二元逻辑运算符不一定返回布尔值
,而是返回表达式的LHS
或RHS
值。为了明确这些表达式类型的要点,重看一下 ECMAScript 文档中的这句话是有帮助的:
&&
或||
产生的值不一定是布尔型的,而是两个操作数表达式之中的一个值。
一些事例
// && / /如果 LHS 是真值,计算并返回 RHS,否则返回 LHS true && 100**2 // 10000 "Joe" && "JavaScript" // "JavaScript" false && 100**2 // false "" && 100**2 // "" NaN && 100**2 // NaN null && 100**2 // null undefined && 100**2 // undefined
逻辑赋值运算符
&&= ||= ??=
这个运算符将赋值与条件逻辑运算符结合在一起,因此命名为“逻辑赋值”。 它们只是一种简写, 例如,x && = y
是x && (x = y)
的简写。
从逻辑赋值返回的值不是更新的赋值,而是已计算表达式的值。
由于先前的ECMAScript特性,比如默认参数和nullish合并操作符,你可以说在逻辑赋值所提供的功能中肯定存在一些冗余。虽然这种速记看起来很流畅,而且我相信当我们发现更多的用例时,它会派上用场的。
逻辑与赋值 ( &&= )
// 逻辑与 LHS &&= RHS // 等价于 LHS && (LHS = RHS) // 事例 // if x is truthy, assign x to y, otherwise return x // 如果 x 为真值,则将 y 赋值给 x, 否则返回 x let x = 1 const y = 100 x &&= y // x 为 100 // 与上面对应的长的写法 x && (x = y)
逻辑或赋值 ( ||= )
// 逻辑或 LHS ||= RHS // 等价于 LHS || (LHS = RHS) // 事例 // 如果 x 为真值,返回 x,否则将 y 赋值给 x let x = NaN const y = 100 x ||= y // x 为 100 // 与上面对应的长的写法 x || (x = y)
逻辑 nullish 赋值 ( ??= )
// 逻辑 nullish LHS ??= RHS // 等价于 LHS ?? (LHS = RHS) // 事例 // if x.z is nullish, assign x.z to y let x = {} let y = 100; x.z ??= y // x 为 { z: 100 } // 与上面对应的长的写法 x.z ?? (x.z = y)
实现中逻辑赋值的例子
React中的JSX
let loading = true const spinner = <Spinner /> loading &&= spinner
DOM
el.innerHTML ||= 'some default'
对象
// 如果对象没有 onLoad 方法,则设置一个方法 const config = {}; config.onLoad ??= () => console.log('loaded!')
const myObject = { a: {} } myObject.a ||= 'A'; // 被忽略,因为 myObject 中 a 的值为真值 myObject.b ||= 'B'; // myObject.b 会被创建,因为它不丰 myObject 中 // { // "a": {} // "b": "B" // } myObject.c &&= 'Am I seen?'; // 这里的 myObject.c 为虚值,所以什么都不会做
如何在项目中使用逻辑赋值
Chrome 已经支持逻辑赋值。 为了向后兼容,请使用 transformer。 如果您使用的是Babel,请安装插件:
npm install @babel/plugin-proposal-logical-assignment-operators
并在 .babelrc
中添加发下内容:
{ "plugins": ["@babel/plugin-proposal-logical-assignment-operators"] }
逻辑赋值是一个全新的概念,所以还没有太多相关的知识。如果你有其他关于逻辑赋值的好用法的例子,请在下面留下评论。
英文原文地址:https://seifi.org/javascript/javascript-logical-assignment-operators-deep-dive.html
作者:Joe Seifi
更多编程相关知识,请访问:编程入门!!
Atas ialah kandungan terperinci 详解javascript中逻辑运算符. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Operator += digunakan untuk menambah nilai operan kiri kepada nilai operan kanan dan menetapkan hasilnya kepada operan kiri Ia sesuai untuk jenis berangka dan operan kiri mesti boleh ditulis.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Python digunakan secara meluas dalam pelbagai bidang dengan sintaksnya yang ringkas dan mudah dibaca. Menguasai struktur asas sintaks Python adalah penting, kedua-duanya untuk meningkatkan kecekapan pengaturcaraan dan untuk mendapatkan pemahaman yang mendalam tentang cara kod tersebut berfungsi. Untuk tujuan ini, artikel ini menyediakan peta minda komprehensif yang memperincikan pelbagai aspek sintaks Python. Pembolehubah dan Jenis Data Pembolehubah ialah bekas yang digunakan untuk menyimpan data dalam Python. Peta minda menunjukkan jenis data Python biasa, termasuk integer, nombor titik terapung, rentetan, nilai Boolean dan senarai. Setiap jenis data mempunyai ciri dan kaedah operasinya sendiri. Operator Operator digunakan untuk melaksanakan pelbagai operasi pada jenis data. Peta minda merangkumi jenis operator yang berbeza dalam Python, seperti operator aritmetik, nisbah

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Pengenalan kepada kaedah mendapatkan kod status HTTP dalam JavaScript: Dalam pembangunan bahagian hadapan, kita selalunya perlu berurusan dengan interaksi dengan antara muka bahagian belakang, dan kod status HTTP adalah bahagian yang sangat penting daripadanya. Memahami dan mendapatkan kod status HTTP membantu kami mengendalikan data yang dikembalikan oleh antara muka dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan memberikan contoh kod khusus. 1. Apakah kod status HTTP bermakna kod status HTTP apabila penyemak imbas memulakan permintaan kepada pelayan, perkhidmatan tersebut

Pengenalan kepada pengendali python Operator ialah simbol atau kata kunci khas yang digunakan untuk melaksanakan operasi antara dua atau lebih operan. Python menyediakan pelbagai operator yang meliputi pelbagai kegunaan, daripada operasi asas matematik kepada manipulasi data yang kompleks. Pengendali matematik Pengendali matematik digunakan untuk melaksanakan operasi matematik biasa. Ia termasuk: contoh operasi operator + penambahan a + b - penolakan a-b * pendaraban a * b / bahagi a / b % operasi modulo (ambil baki) a % b ** operasi kuasa a ** b // pembahagian integer (buang baki) a//b Operator Logik Operator logik digunakan untuk menggabungkan nilai Boolean dan menilai keadaan. Ia termasuk: contoh operasi operator dan operasi logik dan aandbor logik atau aorbnot logik bukan nota perbandingan
