Js运算符(操作符)

简介: Js运算符(操作符)

Js运算符(操作符)
算数运算符#

a = 1 + 1 // 2
a = 10 - 5 // 5
a = 10 / 5 // 2
a = 10 / 0 // js中除以0不会报错,结果是Infinity
a = 22 // 4
a = 2*
2 //
a = 10 % 4 // 取余,2

js中算数运算,除了字符串的加法,会自动将非数值转换为int进行计算,不像其他语言会报错
[box.rockiesenglish.com)
[box.cvdds.com)
[box.itdsm.com)
[box.xjxqd.com)
[box.931226.com)
[box.oriencris.com)
[box.sjouke.com)
[box.leitianlight.com)

a = 10 + true // 11

a = 10 - "3" // 7

a = 5 + null // 5

a = 5 - undefined // NaN

字符串的加法,会将非字符串的值转换为字符串,进行字符串拼接

a = "1" + a // "1a"

a = "1" + 1 // "11"

a = "1" + null // 1null

利用算数运算隐式类型转换的特性,也可以用于类型转换,比如 true +'',使用值与空字符串相加,结果会将true转换成字符串的true

赋值运算符#

=用来将一个值赋值给一个变量

let a

a = 10 // 将右边的值,赋值给左边变量

let b = a // 将a赋值给b,一个变量只有在左边的时候才是变量,在右边的时候就是值

赋值运算

// 大部分运算符不会改变变量的值,赋值运算符除外

a = 10
a + 1 // a+1的结果是11,但是a还是10,结果没有赋值

a += 1 // a的结果是11,等价于 a = a + 1, /= 、*= 等等原理一样

??=空赋值

只有当变量的值是null或undefined的时候,才会进行赋值操作

 let a
    a ??= 1 // a没有值,将1赋值给a
    console.log(a) // 1


    let b = 10
    b ??= 2 // b已经有值了,所以不会将2赋值给b
    console.log(b) // 2

一元正负#

let a = 10
// 正号:不会改变数值的符号
a = +a // 10

// 负号:可以对数值进行符号位取反
let b = 10
b = -b // -10
a = -a // -10

// 当对非数值类型进行正负运算时,会先将其转化为数值然后再运算
let c = "10"
c = +c // int 10,等价于b=Number(c),也可以使用一元的+转换类型
c = -c // int -10

自增和自减#
自增#

自增分为前自增(变量++)和后自增(++变量)

// 前自增
let a = 10
console.log(a++) // 10
console.log(a) // 11

// 后自增
let b = 20
console.log(++b) // 21
console.log(b) // 21

// 前后自增都会使原变量的值增加1,区别在于返回值不同
// 前自增表达式的返回值是自增前的值,后自增的返回值是自增后的值

自减#

自减也分为前自减和后自减,原理与自增一致

let c = 10
console.log(c--) // 10
console.log(c) // 9

let d = 10
console.log(--d) // 9
console.log(d) // 9

逻辑运算符#
逻辑非!#

! 可以对一个值进行非运算,可以对一个布尔值进行取反操作,如果对一个非布尔值进行取反,会先将其转化为布尔值再进行取反,可以利用该特定将其他类型转换为布尔值

let result
result = !0 // true

逻辑与&&#

与运算如果所有的表达式都是为true,则返回true,否则返回false

与运算是短路的,如果有值为false,则直接返回false,不会向后执行

let result

result = true && true // true

result = true && false // false

result = true && alert(1) // alert会执行

result = false && alert(1) // alert不会值

对于非布尔值的运算,会将其转化为布尔值进行运算,但是最终返回不是布尔,会返回原值

如果有值为false,则直接false的值,如果值都为true,则返回最后一个值

let result
result = 1 && 2 && 3 // 3

result = 1 && 0 && 2 // 0

逻辑或||#

当 ||运算的时候左右有true的值,则返回true,否则false

或运算也是短路的,如果找到true则直接返回,不会向后运算

对于非布尔值的运算,会转换为布尔值然后运算,但是最终也会返回原值,如果第一个是false返回第二个值

let result
result = true || false // true
result = false || false // false

result = 1 || 2 // 1
result = 0 || 2 // 2

result = 1 || alert(1) // 不会会执行alert
result = 0 || alert(1) // 会执行alert

关系运算符#

检查两个值之间的关系是否成立,成立返回true,不成立返回false

let result

result = 5 > 5 // false
result = 5 >=5 // true
result = 5 <= 5 // true

// 当对非数值进行关系运算时,会先转为为数值再比较
result = "1" > false // true
result = 5 < "10" // true

// 当关系运算符两端是两个字符串,不会将字符串转换数值,而是逐位比较自费的Unicode编码
result = "a" < "b" // true
result = "12" > "2" // false ,即使两个字符串都是数值,也不会转换数值运算
result = +"12" > "2" // true 可以使用一元运算将一个值转换为数值,则会进行数值运算

相等运算符#

==相等运算符,用来比较两个值是否相等,相等返回true,否则false

    如果两个值是不同类型时,相等运算符会将他们转换为同类型(通常是数值)再比较
    null和undefined进行相等比较时返回true
    NaN不和任何值相等,包括他自身

===全等运算符都是用来比较两个值是否相等

​ 如果两个值是不同类型,不会进行类型转换,如果两个值类型不同,则直接返回false

let result
// 相等运算
result = 1 == 2 // false

result = "1" == 1 // true

result = null == undefined // true

// 全等运算
result = "1" === 1 // false
result = 2 === 2 // true
result = null === undefined // false,undefined和null相等,但是不全等

!=:比较两个值是否不相等,会自动进行类型转换

!==:比较两个值是否不全等,不会自动进行类型转换

result = 1 != 1 // false

result = 1 != "1" // false

result = 1 !== "1" // true

条件运算符(三元运算符)#

条件表达式?表达式1:表达式2

执行顺序:

    先对表达式进行一个求值判断,如果结果为true,则执行表达式1,如果结果为false,则执行表达式2

let a = 10
let b = 20

a > b ? alert("a") : alert("b")

let max = a > b ? a : b // 如果a大于b,则max=a,否则等于b

运算符优先级

运算符中()拥有最高优先级,如果需要优先运算,可以使用()把表达式包裹起来
相关文章
|
24天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
16天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2577 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
164 2
|
20天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1576 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
22天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
978 14
|
4天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
221 2
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
735 9