day02:js基础——运算符详解

2023-11-03

1.JS运算符分类

运算符类型 表示符号
数学运算符 + , - , * , / , %
比较运算符 >, >=, <, <=, == , !=, === , !==
赋值运算符 =, += , -=, *=, /= , %=
逻辑运算符 && , || , !
一元运算符 ++ , --,
三元运算符 ? :

2. 运算符的使用说明

  在上文我们列举了js中的运算符类型以及表示符号,下面配合代码进行学习。

2.1 数学运算符

js为弱类型语言,对类型的声明不做强制要求,所以我们正在进行运算的时候需要自己格外注意数据的类型

	    // 顾名思义,数学运算符用于进行数学运算
        // 先定义一些变量, 回想一下上一天的数据类型
        var num1 = 1,num2 = 2  
        var str1 = '1' , num3
        var num4 = NaN , str2 = ''
        var num5 = null, str3 = 'undefined'
        var bo1 = true, bo2 = false
        // 1. + 运算,用于进行加法运算
        console.log(num1+num2) // 3
        console.log(num1+str1) // 11
        console.log(num1+num4) // NaN
        console.log(num1+num3) // NaN
        console.log(num1+bo1)  // 2
        console.log(num1+bo2)  // 1  
        console.log(num1+num5)  // 1

        console.log(str1+str2) // 1 
        console.log(str1+str3) // 1undefined
        console.log(str1+bo1)  // 1true
        console.log(str1+bo2)  // 1false
        console.log(str1+num3) // 1undefined
        console.log(str1+num5) // 1null

        console.log(bo1+bo2) // 1
        console.log(bo1+num5) // 1
        // 2. - 运算,用于进行减法运算
        console.log(num1-num2) // -1
        console.log(num1-bo1)  // 0
        console.log(str1-str3) // NaN
        console.log(str1-bo1)  // 0

        // 3. * 运算,用于进行乘法运算
        console.log(num1*num2) // 2
        console.log(str1*str3) // NaN
        console.log(str1*bo1)  // 1

        // 4. / 运算,用于进行除法运算
        console.log(num2/num1) // 2
        console.log(str1/str3) // NaN
        console.log(str1/bo1)  // 1

        // 5. % 运算,用于进行取余数运算
        var num6 = 7
        console.log(num2%num1) // 0
        console.log(str1%str3) // NaN
        console.log(num6%num2)  // 1
  • 为什么会出现以上情况
    • 当加法遇到字符串,只要一侧有字符串,另一侧会自动转换成字符串,然后进行拼接;
    • 其他的运算都会先将左右的数据转换成数值(这里的转换是js自动使用Number方法进行转换,不再进行赘述)然后进行数学运算。

熟练掌握数据类型转换,记住'+'运算只有在遇到字符串才会转string,其余均通过Number()方法转换之后在进行数学运算

2.2 比较运算符

该运算符主要用于条件判断,其表达式返回一个布尔值

        var num1 = 10, num2 = 20, num3 = 10
        var str1 = '10', str2 = '20'
        console.log(num1 > num2)  //false 
        console.log(num1 < num2)  //true
        
        console.log(num1 >= num2)  //false 
        console.log(num1 <= num3)  //true

        console.log(num1 == str1)  //true 
        console.log(num1 === str1)  //false

        console.log(num1 != str1)  //false 
        console.log(num1 !== str1)  //true
  • 注意以下两点即可
    • <=, >= 表示的是大于 或者 等于
    • == , === 区别在于前一个只对于值进行比较,后一个对于值和类型都进行比较
    • != , !== 区别同上

2.3 赋值运算符

用于对变量赋值

        // = , 赋值
        var num1 = 1, num2 = 2 , num3 = 9
        // += -= /=  %=  均先进行数学运算在进行赋值
        console.log(num1+=num2)  // 等同于 num1 = num1+num2
        console.log(num1-=num2)  // 等同于 num1 = num1-num2
        console.log(num3%=num2)  // 等同于 num3 = num3%num2
        console.log(num3/=num2)  // 等同于 num3 = num1/num2

思考一下这里的输出结果是多少?

2.4 逻辑运算符

用于判断时进行多条件的连接

符号 效果
&& 条件均为真才返回true
|| 条件有一个为真返回true
对条件取反

根据上表以及2.2小节思考多条件连接的打印结果

	    var a = 11>10    
        // 取反   
        console.log(!a) 
        // 多条件连接
        console.log(14>10 && 20>5 && 2=='2')
        console.log(14>10 && 20>5 && 2==='2')
        console.log(14>10 && 20>5 || 2=='2')
        console.log(14>10 && 20>5 || 2=='2')
        // 逻辑短路问题
        14>11 && alert('我执行了吗?')
        10>11 && alert('我执行了吗?')
        14>11 || alert('我执行了吗?')
        10>11 || alert('我执行了吗?')

逻辑短路问题

	在js中,存在逻辑短路问题。
	代码从左向右执行
	- 当遇到&&连接的左侧条件为假,js会判断此语句后面写啥都改变不了判断的结果,此时产生短路&&右侧的代码均不执行
	- 当遇到||连接的左侧条件为真,js会判断此语句后面写啥都改变不了判断的结果,此时产生短路||右侧的代码均不执行

2.5 一元运算符

        var num1 = 1, num2 = 2
        console.log(num1++)  //1
        console.log(num1)    //2
        console.log(++num2)  //3

一元运算符分为前置、后置。

  • 当运算符在前面,为前置运算符,作用为不管此变量进行运算,输出等操作先执行前置运算。
  • 当运算符在后面,为后置运算符,作用为不管此变量进行运算,输出等操作先使用原来值,然后进行后置运算。

2.6 三元运算符

用法:条件? 结果1:结果2

	    //  当条件满足执行结果1, 不满足执行结果2
        console.log(10>5?'结果1':'结果2')
        console.log(10<5?'结果1':'结果2')

对于三元运算符后续会进行更加详细的说明

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

day02:js基础——运算符详解 的相关文章

  • 如何检测浏览器是否支持自定义元素

    我正在查看 Modernizr 它应该有助于功能检测 这应该可以帮助确定您的网站是否与给定的 Web 浏览器兼容 但我没有看到任何表明我可以使用它来检测自定义 HTML 的内容我们在内容中创建和定义的元素 如果不是 Modernizr 我如
  • 关闭选项卡时要求确认[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我在某些浏览器上关闭页面时 我希望出现一个消息框 并询问我是否真的要关闭页面 有两个按钮 如果我单击No那么这个标签就不会被关闭 我怎样
  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • Google App Engine:修改云运行环境

    我正在尝试部署一个使用自定义 Node js 服务器的 Next js 应用程序 我想将自定义构建变量注入应用程序 next config js const NODE ENV process env NODE ENV const envTy
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • ubuntu22设置静态IP 及 无线网卡启停

    标题 查看网络状态 ifconfig 开关无线网卡 sudo ifconfig wlo1 up down 搜索并显示wifi信号 sudo nmcli device wifi rescan nmcli device wifi list 连接
  • 文盘Rust -- 生命周期问题引发的 static hashmap 锁

    2021年上半年 撸了个rust cli开发的框架 基本上把交互模式 子命令提示这些cli该有的常用功能做进去了 项目地址 https github com jiashiwen interactcli rs 春节以前看到axum已经0 4
  • 路径参数和url传参

    请求参数的三种方式 第一种路径参数 后端接收 其中 PathVariabel注解的形参名字要与路径参数形参名字相等 不相等就用 value值来与路径参数名字相等 第二种url地址传参 url xxx abc get请求只能传query参数
  • 计算机白板记录,电子白板:计算机接口介绍

    电子白板 计算机接口介绍 接口类型指的是电子白板与电脑系统采用何种方式进行连接 电子白板 什么是计算机接口 目前电子白板与电脑连接常见的接口类型 有并口 也有称之为ieee1284 centronics 和串口 也有称之为rs 232接口的
  • java进阶Kafka集群实战之原理分析及优化教程全在这里

    我不去想是否能够成功 既然选择了Java 便只顾风雨兼程 我不去想能否征服Kafka集群 既然钟情于Java 就勇敢地追随千锋 我不去想Kafka集群有多么晦涩难懂 既然目标是远方 留给世界的只能是努力拼搏的背影 我不去想未来是平坦还是泥泞
  • 10.两个链表相加求和

    题目 假设链表中每一个节点的值都在 0 9 之间 那么链表整体就可以代表一个整数 给定两个这种链表 请生成代表两个整数相加值的结果链表 思路 首先是逆序相加 故这里用到了两个栈 分别存放两个链表中的值 两数相加会涉及到进位问题 所以考虑了进
  • ZeroQuant与SmoothQuant量化总结

    ref ZeroQuant Efficient and Affordable Post Training Quantization for Large Scale Transformers SmoothQuant Accurate and
  • qt程序运行时无任何错误提示信息,但是无法进入main函数

    问题 开发环境 win7 vs2013 qt 5 9 1 64位程序 qt程序运行时无任何错误提示信息 但是无法进入main函数 原因 程序中使用了visa库 使用的库的版本有问题
  • #ifndef, #define, #endif区别和使用

    文件中的 ifndef 头件的中的 ifndef 这是一个很关键的东西 比如你有两个C文件 这两个C文件都include了同一个头文件 而编译时 这两个C文件要一同编译成一个可运行文件 于是问题来了 大量的声明冲突 还是把头文件的内容都放在
  • 专访京东孙海波:大牛架构师养成记及电商供应链中区块链技术的应用

    编者按 每个人的成长曲线不同 有的人在研究生之时就已有相当知名的产品和框架 从而在接下来的工作中一路顺风顺水 有的人缺需要经历一个又一个的坑才能成长 不管是前者的聪明高效 还是后者的笨鸟先飞 他们都是在迈着脚步不断地向前 不妨 我们停下脚步
  • VS永久配置Opencv 和 Cmake配置OpenCV_contrib扩展模块 (整体思路 + 注意事项)

    1 VS永久配置Opencv 1 1 在opencv官网下载后并安装Opencv 官网地址 https opencv org 1 2 安装完成后 配置opencv的环境变量 1 3 在VS中配置opencv的属性表 步骤如下 1 在VS新建
  • 分割字符串的方法

    1 split 将一个字符串分割为子字符串 然后将结果作为字符串数组返回 2 indexOf 返回某个指定的字符串值在字符串中首次出现的位置 从左向右 没有匹配的则返回 1 否则返回首次出现位置的字符串的下标值 3 substr start
  • adb几个常见命令

    ADB Android Debug Bridge 调试桥 1 将设备连接到电脑 命令 adb connect 127 0 0 1 62001 2 检查设备连接情况 命令 adb devices 3 发送文件到设备 命令 adb push d
  • 基于Python的大数据的人才招聘数据分析与可视化平台应聘兼职-爬虫安装项目定制算法作业代做计算机毕业设计源代码

    更多项目资源 最下方联系IT实战课堂 博主拥有多年的T技术研发项目架构和教学经验 CSDN 51CTO 腾讯课堂等平台优质作者 高级讲师 培训机构联合创始人 现专注项目定制Java 小程序 前端网页 Python App NodeJs PH
  • STL之rotate

    STL对左旋转字符串针对三种不同数据结构进行了不同的实现 对单向链表采用的是同步位移 双向链表是三次翻转 都很简单 主要看看针对随机存取的数组做的循环位移实现 STL这个版本的源码如下 cpp view plain copy templat
  • UniCode 下 CString 转 char* 的方法

    1 Unicode下CString转换为char 方法一 使用API WideCharToMultiByte进行转换 CString str T D 校内项目 QQ bmp 注意 以下n和len的值大小不同 n是按字符计算的 len是按字节
  • (java功能篇)谷歌获取地址经纬度

    package com mohe map import java io BufferedReader import java io IOException import java io InputStreamReader import ja
  • vant+cropperjs 实现图片上传和图片截取

    完整代码
  • 【WEB安全】PHP靶场实战分析——DVWA

    文章目录 前言 一 实战前的准备 1 dvwa靶场安装 2 代码审计工具介绍 2 1 seay代码审计工具的介绍 2 2 rips 审计工具介绍 二 DVWA通关讲解 1 brute force 暴力破解 low Medium High i
  • day02:js基础——运算符详解

    js运算符 1 JS运算符分类 2 运算符的使用说明 2 1 数学运算符 2 2 比较运算符 2 3 赋值运算符 2 4 逻辑运算符 2 5 一元运算符 2 6 三元运算符 1 JS运算符分类 运算符类型 表示符号 数学运算符 比较运算符