前端-JS基础之运算符
运算符
算术运算符
加(+) 减(-) 乘(*) 除(/) 取余(%) 乘方(**)
// 加法运算
let a = 1
let b = a + 2 // 此时b等于3// 减、乘、除同理
重点说下取余运算
取余运算即是字面含义,取除运算的余数,有时也叫模运算
// 例如:5 除以 3 商为1 余数为2
let a = 5 % 3 // 此时a存储的就是5除以3的余数2let b = 6 % 2 // 此时能整除,所以余数为0,则b的值为0// 小模大的余数
// 例如:3 除以 5,因为被除数比除数小,所以此时商为0,余数为3
let c = 3 % 5 // 此时 c = 3let d = 2 % 10 // d = 2
// 所以:小值对大值取余运算时,余数为小值
接着来看乘方运算,乘方运算就是计算某个数的n
次方的结果
// 例如:计算5的平方
let a = 5 ** 2 // 等同于 a = 5 * 5 ==> a = 25let b = 4 ** 4 // b = 256let c = 2 ** 3 // c = 8
赋值运算符
等于(=) 加等于(+=) 减等于(-=) 乘等于(*=) 除等于(/=) 取余等于(%=) 乘方等于(**=)
看起来虽然多,但是比较比较容易理解
通常看到等号,要先计算等号右边
// 等于 以下两种都是等于运算,简单来说 就是对变量赋值
let a = 1
let b = 1 + 3// 后续的带了运算符的都是同一个原理
// 例如: +=
let a = 1
a += 1 // 此时a=2,因为a += 1等价于 a = a + 1// 其他同理
比较特殊的两个赋值运算符自增1(++)、自减1(--)
let a = 1
a++ // 此时a = 2,因为a的自增1运算,可以理解为 a += 1,也就是 a = a + 1// 同理
let b = 3
b-- // 此时b = 2,因为b的自减1运算,可以理解为 b -= 1,也就是 b = b - 1
所以自增和自减,是在自身原始值的基础上,进行增1或者减1计算,并且会改变自身的值,有赋值运算的效果
需要注意的是,自增和自减还有一些需要注意的地方,以自增为例
let a = 1let b = a++ // 请注意,此时 b = 1
原因是自增和自减,有两种情况,一种为后置自增或后置自减,另外一种为前置自增和前置自减,写法就是符号写在后面和前面的区别:前置自增:++a
、后置自增:a++
,自减同理。
接下来我们来看下上述为何b=1,而不是2,原因是**后置自增和后置自减参与其他运算时,是先将原始值完整参与其他运算后,才进行自增;而前置自增和前置自减,是先将原始值自增或自减后,才参与其他运算。**有一个先后顺序的问题。
let a = 1let b = a++ // 此时 b = 1,a = 2
是因为这里有一个自增运算,同时还有一个赋值的等于运算,而a的自增是后置的,所以此处程序先将a的原始值1参与其他运算(此处是赋值运算)后才会自增,所以b接收到的是原始值1,而后,a自增为2。所以结果为:b=1 a=2
,自增运算同理。
let a = 1
let b = ++a // a = 2 b = 2
根据上述原理,此时a的前置自增,会先进行自增,后参与赋值运算,所以a=2 b=2
赋值运算符是非常简单的运算符,唯一需要关注的是自增和自减的情况。
比较运算符
大于(>)、小于(<)、相等(==)、不相等(!=)、全等(===)、不全等(!==)、大于等于(>=)、小于等于(<=)
比较运算符的结算结果,永远都是一个布尔值,条件成立为true
,不成立为false
let a = 2 > 1 // a = true
let b = -5 > 1 // b = false
需要注意的是相等和全等的区别(不相等和不全等同理)
相等判断运算时,如果两个运算数类型不相同时,会先转换为同一个类型,再进行比较,如果相等则结果为true
,反之false
,而不全等运算时,如果两个运算数类型不相同,则立刻返回false
,不进行任何类型转换,如果类型相同,则正常比较,根据结果返回值。
let a = 1 == "1" // 请注意,第一个运算数是数字1,第二个则是字符串1
// 此时 a = true,由于此时是相等比较,所以会将字符串1转换为数字后进行比较。let b = 1 === "1" // b = false
// 此时,由于两个数类型不同,所以全等运算时,直接返回false// 不相等和不全等同理
字符串再比较大小时,是按位比较各自的编码。"3">"20"
得到true
对象在做相等判断时,比较的是内存地址。
关于不同类型的值进行比较运算时,类型的转换规则参考下表:
值 | 字符串操作环境 | 数字运算环境 | 逻辑运算环境 | 对象操作环境 |
---|---|---|---|---|
undefined | “undefined” | NaN | false | Error |
null | “null” | 0 | false | Error |
非空字符串 | 不转换 | 字符串对应的数字值 | True | |
空字符串 | 不转换 | 0 | false | String |
0 | “0” | 不转换 | false | Number |
NaN | “NaN” | 不转换 | false | Number |
Infinity | “Infinity” | 不转换 | true | Number |
Number.POSITIVE_INFINITY | “Infinity” | 不转换 | true | Number |
Number.NEGATIVE_INFINITY | “-Infinity” | 不转换 | true | Number |
Number.MAX_VALUE | “1.7976931348623157e+308” | 不转换 | true | Number |
Number.MIN_VALUE | “5e-324” | 不转换 | true | Number |
其他所有数字 | “数字的字符串值” | 不转换 | true | Number |
true | “true” | 1 | 不转换 | Boolean |
false | “false” | 0 | 不转换 | Boolean |
对象 | toString() | value()或toString()或NaN | true | 不转换 |
Symbol | toString() | Error | true | Symbol |
BigInt | toString() | 不转换 | 除0n都是true | BigInt |
逻辑运算符
与(&&)、或(||)、非(!)
与运算和或运算可以理解为一个管道
与是和的意思,true
能通过,false
不通过
或就是或者, false
通过,true
不通过
非也叫取反。
逻辑运算符在运算时,会在计算时,临时将运算数转换为布尔值。
let a = 1let b = 2let c = a && b // 此时 c = 2
与运算时,a被转为布尔值true
,根据与运算符的特性,true
通过了,所以取到右边的值。c就等于右边的值2
let a = 0let b = 2let c = a && b // c = 0
此时a转为布尔值false
,false
不能通过&&
,所以停下来了,就取到了a的值,所以c等于0
或运算跟与运算则行为相反
关于各种值转为布尔值的情况,记住以下几个值即可:
JS中所有的值只有如下6个值可以转为false
,除了这6个值,其他的都是转为true
- 数字:
NaN
- 空指针:
null
- 未定义:
undefined
- 数字:
0
- 布尔值:
false
- 空字符串:
“”
非运算是将运算符之后的值临时转为布尔值后,取其相反值
let a = 1let b = !a // b = false
a是数字1,转为布尔值为true
,所以相反值为false
,则b = false
let a = 0let b = !a // b = true
let a = ""let b = !a // b = true
let a = "JavaScript真是太简单了"let b = !a // b = false
6. 运算符优先级
运算符优先级
前端-JS基础之运算符相关推荐
- ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...
JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...
- 前端JS基础知识复习笔记(1)
珠峰前端JS基础复习笔记(1) 在财务工作中自学了HTML和CSS之后,硬啃了JS高级编程三,实在觉得想要学的透是需要找一位好老师的,于是最近在学习周啸天老师的JS高级编程课,课外需要再补补基础,就回 ...
- 前端JS基础知识复习笔记(2)
珠峰的JS基础课程笔记(第二天) 今天早上做完了变量的作业,下午听基础课做做笔记,最好没有事干的时候可以翻出来看看,欢迎大家收藏和我一起复习回顾记忆,一起学习一起成长一起挣钱钱ヾ(◍°∇°◍)ノ゙ . ...
- js增加属性_前端js基础2
JavaScript ECMAScript(ES):规定了js的一些基础的核心知识(变量.数据类型.语法规范.操作语句等) 3/5==6/7 说出ES5和ES6的区别? DOM:document ob ...
- 100道前端js基础面试题
1.JavaScript有哪些垃圾回收机制? 有以下垃圾回收机制. 标记清除( mark and sweep) 这是 JavaScript最常见的垃圾回收方式.当变量进入执行环境的时候,比如在函数中声 ...
- 前端-JS基础之常用内置对象
定时器 setTimeout() 用来指定某个函数或字符串在指定的毫秒数之后执行 只执行一次 clearTimeout() 清除定时器 /*setTimeout() 有两个参数1.执行体 注意:函数传 ...
- web前端js基础之js的几种“截取字符串”方法
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- 前端JS基础面试题总结(1)
第一部分 1.JS的组成部分 ES DOM BOM 2.JS中的数据类型都有哪些?以及两大类之间的区别? • 基本数据类型 • String字符串 • Number数字 • Boolean布尔 • N ...
- 前端-js基础-循环
#博学谷IT学习技术支持 目录 for循环 双重for循环 while循环 do...while循环 continue 关键字 break 关键字 循环 循环的目的:在实际问题中,有许多具有规律性的重 ...
最新文章
- 深入分析SpringBoot源码如何内嵌Tomcat容器?
- 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?
- 笔记:Java中的单例设计模式
- Gin实际编写中间件
- 大话javascript 2期:执行上下文与执行上下文栈
- 百度SEO站群流光风格个人主页HTML源码
- 2014-4-2学习笔记(Linux从入门到精通 刘忆智 清华大学出版社)
- 解决This application failed to start because cannot find or load the qt platform plugin 'xcb'
- 如何能顺利往表中允许为null的字段插入null值(参数绑定)
- 吴恩达机器学习笔记目录
- revel MySQL_Revel 教程
- 随意发软件如何自动发帖已更新2022
- SAP凭证的冲销-FB08
- 抠取头发丝(用PS cc)
- PositiveUnlabeled Data Learning——第四弹(Semi-Supervised Classification/AUC Optimization)
- 适合编程初学者的开源博客系统(NodeJS版)
- 一看就懂!!各进制转换方法
- 7月6号奥特曼服务器维护中,《奥特曼英雄归来》7月12日更新公告
- layuimini后台管理系统的简单使用
- 在世界上搜词采用计算机,计算机二级Word,Excel真题及答案