您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

前端入门——JavaScript 操作符

时间:2022-07-18 14:01:42  来源:  作者:前端石三

所谓操作符,就是用来操作数据值的符号,在JAVAScript中包括算术操作符、位操作符、关系操作符和相等操作符。这些操作符可以操作所有类型的数据,比如字符串、数字、布尔值,甚至对象。

一元操作符

所谓一元操作符就是只能对一个数据值进行操作,比如(递增、递减)操作符。

递增、递减操作符是直接借鉴C语言的,它分前置型和后置型。前置就是操作符在要操作的变量之前,后置在变量之后。

如下示例:

// 前置型
let age = 20;
++age; // 递增
console.log(age); // 结果输出21
--age;//递减
console.log(age); // 结果输出20

如上面例子,age通过++操作符递增变成21,又通过--操作符递减变成20;上面的操作等同下面的操作:

// 后置型
let age = 20;
age = age + 1; // 加1
age = age -1;  // 减1

同理使用后置操作符会得到上面同样的结果,但是前置和后置有区别。前置操作符在语句被求值以前改变,后置是在语句被求值后改变。通过下面的例子看下其区别:

// 前置
let age = 20;
let anotherAge = --age + 5;
alert(age); // 输出19
alert(anotherAge); // 输出24

由于前置操作符的优先级和执行语句相等,因此会从左到右依次求值。上面的--age 会先进行递减操作,再继续后面的 + 5 运算,所以结果是24。

// 后置时
let age = 20;
let anotherAge = age-- + 5;
alert(age); // 输出19
alert(anotherAge); // 输出25

但是后置的最终结果却是25,因为age-- 使用了递减前的值继续和后面进行+5运算。

如果使用一个加号或减号时,加号代表正值、减号代表负值。

加减乘除操作符

操作多个数据值,比如加减乘除等:

let a = 1,b=2;
let c = a + b; // 加
let d = c - a; // 减
let e = d * b; // 乘
let f = e/d; // 除

注意加减乘除主要用来操作数字类型的数据,如果操作数不是数字类型,会先进性强制转换再进行计算,这样结果会不确定。

位操作符

位操作符,是指按内存中的表示的数值位来操作数值,通俗讲就是用来操作二进制的数据。二进制数据都是由0、1组成的,在JavaScript中所有数值都是64位的格式存储,但位操作符不直接在64位的值上进行计算,会先转化成32位后再运算。位操作符有以下几种:

按位非(NOT)

按位非操作符是(~)符号,就是将二进制中每位数值进行反码操作。其规则如下:

操作符

数值

结果

~

1

0

~

0

1

如下示例:

let a = 25;
let b = ~a;
alert(b); // 输出-26

按位与(AND)

使用(&)符号表示,它有2个操作数,当2个数对应的位都是1时返回1,任何一位是0则返回0。如下规则:

数值1

操作符

数值2

结果

1

&

1

1

1

&

0

0

0

&

1

0

0

&

0

0

示例:

let a = 25 & 3;
alert(a); // 输出结果是1

按位或(OR)

用(|)符号表示,同样也是2个操作数。其规则是只要有一位是1其结果就是1,负则结果是0;

数值1

操作符

数值2

结果

1

|

1

1

1

|

0

1

0

|

1

1

0

|

0

0

示例:

let a = 25 | 3;
alert(a); // 输出结果是27

按位异或(XOR)

由(^)符号表示,也是操作2个操作数,其当2个操作数的位值相同时返回0,负则返回1。

数值1

操作符

数值2

结果

1

^

1

0

1

^

0

1

0

^

1

1

0

^

0

0

示例:

let a = 25 ^ 3;
alert(a); // 输出结果是26

左移

使用(<<)两个小于号表示,这个操作符会将数值每一位向左移动指定位数。如下示例:

let a = 2;  // 二进制 10
let b = b << 5; // 二进制的 1000000,十进制64

上面,将二进制10向左移动5位,注意左移会多出5个空位,用0来填充,这样就会得到一个完整的32位二进制数据。

注意,左移不会影响符号位(二进制位中第一位表示数的正负),如-2 向左移5位结果是-64。

有符号的右移

使用(>>)两个大于号表示,会将每位向右移动指定位数,但保留符号位(即正负号标记)。如下示例:

let a = 64;  // 二进制 1000000
let b = b >> 5; // 二进制的 10,十进制的2

在移位过程,原数中也会出现空位,只不过这次空位出现在原数值左侧、符号位右侧。空位使用符号位值填充。

有符号的整数,指32位中前31位表示整数的值,第32位表示数值的符号,0正数,1负数。这个表示符号的位就是符号位。

无符号的右移

使用(>>>)三个大于号表示,这个操作会将所有32位都向右移动。对于正数其结果和有符号的右移一样,如下示例:

let a = 64;  // 二进制 1000000
let b = b >>> 5; // 二进制的 10,十进制的2

但是负数就不一样了,无符号的右移是以0来填充空位,不像有符号右移使用符号位填充。所以其结果相差很大,如下示例:

let a = -64;  // 二进制 1111 1111 1111 1111 1111 1111 1100 0000
let b = b >>> 5; // 二进制 0000 0111 1111 1111 1111 1111 1111 1110 ,十进制的134217726

布尔操作符

在任何编程语言中,布尔操作符都是非常重要的,它是用来判断逻辑的关键,布尔操作符一共有三种:非(NOT)、与(AND)、或(OR)。

逻辑非

使用(!)感叹号表示逻辑非,其规则就是:

操作符

逻辑值

结果

true

false

false

true

逻辑与

使用(&&)表示,操作两个数,如下示例:

let a = ture && false;

其规则如下:

逻辑值1

操作符

逻辑值2

结果

ture

&&

ture

ture

ture

&&

false

false

false

&&

ture

false

false

&&

false

false

也就是只有当2个数值都是true时其结果才是true。

逻辑或

使用(||)符号表示,也是有两个操作数,其示例:

let a = true || false;

规则如下:

逻辑值1

操作符

逻辑值2

结果

ture

||

ture

ture

ture

||

false

ture

false

||

ture

ture

false

||

false

false

也就是2个操作数中有一个true,结果就是true,负则是false。

注意布尔操作符,不仅仅可以操作布尔类型值,对于其它数据类型同样适用,只不过会先将其它数据类型转换成布尔值,再进行布尔运算。如下示例:

let a = !1; //  输出false
let b = !'string'; // 输出false
let c = 1 || 0; // 输出true
let e = 1 && 0;// 输出false
let d = ''&& 2; // 输出true

关系操作符

关系操作符用来比较2个操作数,有小于(<)、大于(>)、小于等于(<=)和大于等于(>=)。其比较的结果返回一个布尔值,true或false。

如下示例:

let a = 5 > 3; // true
let b = 5 < 3; // false

同样,关系操作符也可以适用其它类型的数据,比如字符串比较大小时,会按照字符的编码大小比较。如下示例:

let a = "Brick" < "alphabet"; // true,

上面中因为B字符编码是66,a的编码是97,所以返回true。

相等、不等操作符

在编程中,确定2个值是否相等是一个非常重要的操作。在JavaScript中分相等(==)和全等(===)、不等(!=)和不全等(!==)四种。

相等(==)和不相等(!=)

如下示例:

let a = 1 == 1; // true
let b = 1==0;// false
let c = 1!=1; // false
let d = 1!=0; //true

注意相等和不相等的操作前会先对操作性进行强制转换,如下示例:

let a = true == 1; // 先将true转换成1再比较,结果是true
let b = false == 1; // 先将false转换成0再比较,结果是false

全相等(===)和不全相等(!==)

全等和不全等不同之处是,它在比较数据前,不进行数据类型转换,是对原始数值比较,所以它的结果更加严格准确,如下示例:

let a = 1 === 1; // true
let b = 1=== '1';// false
let c = 1!==1; // false
let d = 1!=='1'; //true

注意和之前相等和不相等的例子比较,其结果非常不一样。

赋值操作符

使用(=)表示赋值操作,其作用就是把等号右侧的值赋值给左边的变量或属性,如下示例:

let a = 10; // 给a变量赋值10

如果在等号前面加上其它操作符,就组成了复合型赋值操作,如下示例:

let a = 10;
a += 5; // 结果是 15

上面的等同于下面:

let a = 10;
a = a + 5; // 结果是 15

当然也可以使用其它操作符,如(*=)、(/=)、(%=)、(-=)、(<<=)等等。

条件操作符

也称三目运算符,它是一种简便的条件运算,可以把它看成是if else的简化,其语法如下:

变量 = 布尔表达式 ? true_value  : false_value

先求出问号前面的布尔表示结果,如果是true,变量使用冒号前面的值,负则使用冒号后面的值。如下示例:

let a = 5 > 3 ? '好' :  '不好'; // 结果是 '好'

逗号操作符

使用(,)符号,表示可以执行多个操作,常用于变量定义或函数参数,如下示例:

var a = 0,b=1,c=2; // a、b、c使用逗号隔开
let a,b,c;

// 函数中的参数a、b、c使用逗号隔开
function test(a,b,c){
	// 函数主体
}
// 调用函数
test(1,2,3)

结论

本节主要讲述了JavaScript中所有的操作符概念,这些都是最基本的知识,需要完全掌握。在平常工作中其中除了位操作符不常用外,其它操作符使用频率很高,尤其是布尔操作符,算术操作符,比较操作符等。

本篇只是大概讲述了操作符的概念和使用方法,还有一些细节没有讲到,作为入门课程已经足够了,你可以自己搜索每个知识点详细内容,比如关于二进制数据、位操作、数据类型强制转换等,这里不再详细介绍。

参考资料:

《JavaScript 高级程序设计

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

https://www.w3cschool.cn/javascript/js-operators.html



Tags:JavaScript   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
JavaScript的异步编程常见模式
在JavaScript中,异步编程是一种处理长时间运行操作(如网络请求或I/O操作)的常见方式。它允许程序在等待这些操作完成时继续执行其他任务,从而提高应用程序的响应性和性能。JavaS...【详细内容】
2024-04-12  Search: JavaScript  点击:(11)  评论:(0)  加入收藏
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  Search: JavaScript  点击:(7)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践&mdash;&mdash;如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  Search: JavaScript  点击:(29)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  Search: JavaScript  点击:(23)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  Search: JavaScript  点击:(13)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  Search: JavaScript  点击:(13)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06  Search: JavaScript  点击:(60)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  Search: JavaScript  点击:(80)  评论:(0)  加入收藏
使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!
本文作者在综合成本因素之下,决定用 Java 脚本来清理一下自己的 iCloud,结果却有了一个意外发现,即在 iCloud 中上传同一个视频和删除此视频之后,iCloud 的空间并不一致,这到底是...【详细内容】
2024-01-11  Search: JavaScript  点击:(115)  评论:(0)  加入收藏
JavaScript前端框架2024年展望
Angular、Next.js、React和Solid的维护者和创作者们展望2024年,分享了他们计划中的改进。译自2024 Predictions by JavaScript Frontend Framework Maintainers,作者 Loraine...【详细内容】
2024-01-05  Search: JavaScript  点击:(99)  评论:(0)  加入收藏
▌简易百科推荐
20k级别前端是怎么使用LocalStorage的,想知道吗?
当咱们把咱们想缓存的东西,存在localStorage、sessionStorage中,在开发过程中,确实有利于咱们的开发,咱们想看的时候也是一目了然,点击Application就可以看到。前言大家好,我是林...【详细内容】
2024-03-26  前端之神  微信公众号  Tags:前端   点击:(14)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  机器之心Pro    Tags:前端   点击:(17)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown &mdash;&mdash; 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  OSC开源社区    Tags:Vue   点击:(23)  评论:(0)  加入收藏
两年前端经验还不会手写Promise?
什么是promise?当我们处理异步操作时,我们经常需要进行一系列的操作,如请求数据、处理数据、渲染UI等。在过去,这些操作通常通过回调函数来处理,但是回调函数嵌套过多会导致代码...【详细内容】
2024-03-07  海燕技术栈  微信公众号  Tags:Promise   点击:(31)  评论:(0)  加入收藏
网站开发中的前端和后端开发有什么区别
前端开发和后端开发都是干什么的?有哪些区别?通俗地讲,前端干的工作是用户可以直接看得见的,而后端开发的工作主要在服务端,用户不太能直接看到。虽然前端开发和后端开发的工作有...【详细内容】
2024-02-21  CarryData    Tags:前端   点击:(37)  评论:(0)  加入收藏
网站程序开发中的前后端分离技术
随着互联网的快速发展和技术的不断创新,传统的网站开发模式已经难以满足日益增长的业务需求。为了提高开发效率、增强系统的可维护性和可扩展性,前后端分离技术逐渐成为了网站...【详细内容】
2024-01-31  网站建设派迪星航    Tags:前后端分离   点击:(27)  评论:(0)  加入收藏
如何优雅的实现前端国际化?
JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库!i18nexti18ne...【详细内容】
2024-01-17  前端充电宝  微信公众号  Tags:前端   点击:(78)  评论:(0)  加入收藏
Vue中Scope是怎么做样式隔离的?
scope样式隔离在 Vue 中,样式隔离是通过 scoped 特性实现的。当在一个组件的 <style> 标签上添加 scoped 特性时,Vue 会自动为这个样式块中的所有选择器添加一个唯一的属性,以...【详细内容】
2024-01-04  海燕技术栈  微信公众号  Tags:Vue   点击:(85)  评论:(0)  加入收藏
vue3中 ref和 reactive的区别 ?
最近有朋友在面试过程中经常被问到这么一个问题,vue3 中的ref 和 reactive的区别在哪里,为什么 要定义两个API 一个 api不能实现 响应式更新吗??带着这个疑问 ,我们 接下来进行逐...【详细内容】
2024-01-03  互联网高级架构师  今日头条  Tags:vue3   点击:(47)  评论:(0)  加入收藏
React18 与 Vue3 全方面对比
1. 编程风格 & 视图风格1.1 编程风格 React 语法少、难度大;Vue 语法多,难度小例如指令:Vue<input v-model="username"/><ul> <li v-for="(item,index) in list" :key="inde...【详细内容】
2024-01-03  爱做梦的程序员  今日头条  Tags:Vue3   点击:(78)  评论:(0)  加入收藏
站内最新
站内热门
站内头条