JavaScript学习记录6
第一节 算数运算符
1. 概述
- 加法运算符x + y
- 减法运算符 x - y
- 乘法运算符 x * y
- 除法运算符x / y
- 指数运算符x ** y
- 余数运算符x % y
- 自增运算符++x 、x++
- 自减运算符--x 、x--
- 数值运算符 +x
- 负数值运算符-x
2. 加法运算符
2.1 基本规则
1 + 1 // 2
true + true // 2
1 + true // 2
'a' + 'bc' // "abc"
1 + 'a' // "1a"
false + 'a' // "falsea"
'3' + 4 + 5 // "345"
3 + 4 + '5' // "75"
1 - '2' // -1
1 * '2' // 2
1 / '2' // 0.5
2.2 对象的相加
var obj = { p: 1 };
obj + 2 // "[object Object]2"
var obj = { p: 1 };
obj.valueOf() // { p: 1 }
var obj = { p: 1 };
obj.valueOf().toString() // "[object Object]"
var obj = {valueOf: function () {return 1;}
};obj + 2 // 3
var obj = {toString: function () {return 'hello';}
};obj + 2 // "hello2"
var obj = new Date();
obj.valueOf = function () { return 1 };
obj.toString = function () { return 'hello' };obj + 2 // "hello2"
3. 余数运算符
12 % 5 // 2
-1 % 2 // -1
1 % -2 // 1
// 错误的写法
function isOdd(n) {return n % 2 === 1;
}
isOdd(-5) // false
isOdd(-4) // false// 正确的写法
function isOdd(n) {return Math.abs(n % 2) === 1;
}
isOdd(-5) // true
isOdd(-4) // false
6.5 % 2.1
// 0.19999999999999973
4. 自增和自减运算符
var x = 1;
++x // 2
x // 2--x // 1
x // 1
var x = 1;
var y = 1;x++ // 1
++y // 2
5. 数值运算符,负数值运算符
+true // 1
+[] // 0
+{} // NaN
var x = 1;
-x // -1
-(-x) // 1
6. 指数运算符
2 ** 4 // 16
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512
7. 赋值运算符
// 将 1 赋值给变量 x
var x = 1;// 将变量 y 的值赋值给变量 x
var x = y;
// 等同于 x = x + y
x += y// 等同于 x = x - y
x -= y// 等同于 x = x * y
x *= y// 等同于 x = x / y
x /= y// 等同于 x = x % y
x %= y// 等同于 x = x ** y
x **= y
// 等同于 x = x >> y
x >>= y// 等同于 x = x << y
x <<= y// 等同于 x = x >>> y
x >>>= y// 等同于 x = x & y
x &= y// 等同于 x = x | y
x |= y// 等同于 x = x ^ y
x ^= y
第二节 比较运算符
1. 概述
2 > 1 // true
- >
- <
- <=
- >=
- ==
- ===
- !=
- !==
2. 非相等运算符:字符串的比较
'cat' > 'dog' // false
'cat' > 'catalog' // false
'cat' > 'Cat' // true'
'大' > '小' // false
3. 非相等运算符:非字符串的比较
5 > '4' // true
// 等同于 5 > Number('4')
// 即 5 > 4true > false // true
// 等同于 Number(true) > Number(false)
// 即 1 > 02 > true // true
// 等同于 2 > Number(true)
// 即 2 > 1
1 > NaN // false
1 <= NaN // false
'1' > NaN // false
'1' <= NaN // false
NaN > NaN // false
NaN <= NaN // false
var x = [2];
x > '11' // true
// 等同于 [2].valueOf().toString() > '11'
// 即 '2' > '11'x.valueOf = function () { return '1' };
x > '11' // false
// 等同于 (function () { return '1' })() > '11'
// 即 '1' > '11'
[2] > [1] // true
// 等同于 [2].valueOf().toString() > [1].valueOf().toString()
// 即 '2' > '1'[2] > [11] // true
// 等同于 [2].valueOf().toString() > [11].valueOf().toString()
// 即 '2' > '11'({ x: 2 }) >= ({ x: 1 }) // true
// 等同于 ({ x: 2 }).valueOf().toString() >= ({ x: 1 }).valueOf().toString()
// 即 '[object Object]' >= '[object Object]'
4. 严格相等运算符
1 === "1" // false
true === "true" // false
1 === 0x1 // true
NaN === NaN // false
+0 === -0 // true
{} === {} // false
[] === [] // false
(function () {} === function () {}) // false
var v1 = {};
var v2 = v1;
v1 === v2 // true
var obj1 = {};
var obj2 = {};obj1 > obj2 // false
obj1 < obj2 // false
obj1 === obj2 // false
undefined === undefined // true
null === null // true
var v1;
var v2;
v1 === v2 // true
5. 严格不相等运算符
1 !== '1' // true
// 等同于
!(1 === '1')
6. 相等运算符
1 == 1.0
// 等同于
1 === 1.0
1 == true // true
// 等同于 1 === Number(true)0 == false // true
// 等同于 0 === Number(false)2 == true // false
// 等同于 2 === Number(true)2 == false // false
// 等同于 2 === Number(false)'true' == true // false
// 等同于 Number('true') === Number(true)
// 等同于 NaN === 1'' == 0 // true
// 等同于 Number('') === 0
// 等同于 0 === 0'' == false // true
// 等同于 Number('') === Number(false)
// 等同于 0 === 0'1' == true // true
// 等同于 Number('1') === Number(true)
// 等同于 1 === 1'\n 123 \t' == 123 // true
// 因为字符串转为数字时,省略前置和后置的空格
// 数组与数值的比较
[1] == 1 // true// 数组与字符串的比较
[1] == '1' // true
[1, 2] == '1,2' // true// 对象与布尔值的比较
[1] == true // true
[2] == true // false
const obj = {valueOf: function () {console.log('执行 valueOf()');return obj;},toString: function () {console.log('执行 toString()');return 'foo';}
};obj == 'foo'
// 执行 valueOf()
// 执行 toString()
// true
undefined == undefined // true
null == null // true
undefined == null // truefalse == null // false
false == undefined // false0 == null // false
0 == undefined // false
0 == '' // true
0 == '0' // true2 == true // false
2 == false // falsefalse == 'false' // false
false == '0' // truefalse == undefined // false
false == null // false
null == undefined // true' \t\r\n ' == 0 // true
7. 不相等运算符
1 != '1' // false// 等同于
!(1 == '1')
相关文章:
JavaScript学习记录6
第一节 算数运算符 1. 概述 JavaScript 共提供10个算术运算符,用来完成基本的算术运算。 加法运算符x y减法运算符 x - y乘法运算符 x * y除法运算符x / y指数运算符x ** y余数运算符x % y自增运算符x 、x自减运算符--x 、x--数值运算符 x负数值运算符-x 减法、…...
如何在没有 iCloud 的情况下将数据从 iPhone 传输到 iPhone
概括 您可能会遇到将数据从 iPhone 转移到 iPhone 的情况,尤其是当您获得新的 iPhone 15/14 时,您会很兴奋并希望将数据转移到它。 使用iCloud最终可以做到这一点,但它的缺点也不容忽视,阻碍了你选择它。例如,您需要…...
Doris安装部署
Doris 概述 Apache Doris由百度大数据部研发(之前叫百度 Palo,2018年贡献到 Apache 社区后,更名为 Doris ),在百度内部,有超过200个产品线在使用,部署机器超过1000台,单一业务最大可…...
[服务器][教程]Ubuntu24.04 Server开机自动挂载硬盘教程
1. 查看硬盘ID ls -l /dev/disk/by-uuid可以看到对应的UUID所对应的分区 2. 创建挂载文件夹 创建好文件夹即可 3. 修改配置文件 sudo vim /etc/fstab把对应的UUID和创建的挂载目录对应即可 其中# Personal mount points下面的是自己新添加的 :分区定位ÿ…...
io多路复用, select, poll, epoll
系列文章目录 异步I/O操作函数aio_xxx函数 https://blog.csdn.net/surfaceyan/article/details/134710393 文章目录 系列文章目录前言一、5种IO模型二、IO多路复用APIselectpollepoll 三、两种高效的事件处理模式Reactor模式Proactor模式模拟 Proactor 模式基于事件驱动的非阻…...
k8s-1.28.2 部署prometheus
一、prometheus helm仓库 ## 网站地址 # https://artifacthub.io/## prometheus 地址 # https://artifacthub.io/packages/helm/prometheus-community/prometheus. # helm repo add prometheus-community https://prometheus-community.github.io/helm-charts # helm repo …...
记录第一次跑YOLOV8做目标检测
今天是24年的最后一天,终于要向新世界开始破门了,开始深度学习,YOLO来敲门~ 最近做了一些皮肤检测的功能,在传统的处理中经历了反复挣扎,终于要上YOLO了。听过、看过,不如上手体会过~ 1、YOLO是什么&#x…...
使用Python爬取BOSS直聘职位数据并保存到Excel
使用Python爬取BOSS直聘职位数据并保存到Excel 在数据分析和挖掘中,爬取招聘网站数据是一项常见的任务。本文将详细介绍如何使用Python爬取BOSS直聘上与“测试工程师”相关的职位数据,并将其保存到Excel文件中。通过逐步分解代码和添加详细注释…...
node.js之---集群(Cluster)模块
为什么会有集群(Cluster)模块? 集群(Cluster)模块的作用 如何使用集群(Cluster)模块? 为什么会有集群(Cluster)模块 Node.js 是基于 单线程事件驱动 模型的…...
SSM-Spring-IOC/DI对应的配置开发
目录 一、IOC 控制反转 1.什么是控制反转呢 2. Spring和IOC之间的关系是什么呢? 3.IOC容器的作用以及内部存放的是什么? 4.当IOC容器中创建好service和dao对象后,程序能正确执行么? 5.Spring 容器管理什么内容? 6.如何将需要管理的对象交给 …...
一文大白话讲清楚CSS元素的水平居中和垂直居中
文章目录 一文大白话讲清楚CSS元素的水平居中和垂直居中1.已知元素宽高的居中方案1.1 利用定位margin:auto1.2 利用定位margin负值1.3 table布局 2.未知元素宽高的居中方案2.1利用定位transform2.2 flex弹性布局2.3 grid网格布局 3. 内联元素的居中布局 一文大白话讲清楚CSS元素…...
航顺芯片推出HK32A040方案,赋能汽车矩阵大灯安全与智能化升级
汽车安全行驶对整车照明系统的要求正在向智能化方向发展。车灯位于汽车两侧,前期有各种各样的实现包括氙气灯、LED灯等等光源技术。矩阵大灯对汽车照明系统朝着安全性和智能化兼具的方向发展起到了重要推动作用。矩阵大灯可以精细控制到每一个小灯珠,从而…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之12 方案再探:特定于领域的模板 之2 首次尝试和遗留问题解决
本文提要 现在就剩下“体”本身的 约定了--这必然是 自律自省的,或者称为“戒律” --即“体”的自我训导discipline。完整表述为: 严格双相的庄严“相” (<head>侧),完全双性的本质“性”(<boot>侧&…...
redis zset底层实现
1.Redis zset底层实现 转载自:https://marticles.github.io/2019/03/19/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Redis-Zset%E5%8E%9F%E7%90%86/ zset底层是压缩列表 跳表实现的。 跳表里面又由字典hash表 跳表实现。 什么时候用压缩列表?什么时候用…...
go.Bar如何让hovertext显示为legend
在 Plotly 的 go.Bar 图中,如果你想让鼠标悬停时 (hover) 显示的文本 (hovertext) 与图例 (legend) 一致,可以通过 hovertemplate 来控制悬停时的显示内容。 实现方法 hovertemplate 是一种自定义工具,允许你完全控制悬停时的文本显示格式。…...
【Vue】分享一个快速入门的前端框架以及如何搭建
先上效果图: 登录 菜单: 下载地址: 链接:https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码:ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…...
Flink源码解析之:如何根据JobGraph生成ExecutionGraph
Flink源码解析之:如何根据JobGraph生成ExecutionGraph 在上一篇Flink源码解析中,我们介绍了Flink如何根据StreamGraph生成JobGraph的流程,并着重分析了其算子链的合并过程和JobGraph的构造流程。 对于StreamGraph和JobGraph的生成来说&…...
UE(虚幻)学习(三) UnrealSharp插件中调用非托管DLL
上一篇文章中我使用UnrealSharp成功使用了我的一个C#控制台程序中的网络模块,这个程序是基于KCP网络了,其中调用了Cmake 编译的一个C的DLL,在虚幻中DLL需要放在Binaries目录中才可以。Unity中只要放在任意Plugins目录中就可以。 但是Binaries…...
leetcode 3219. 切蛋糕的最小总开销 II
题目:3219. 切蛋糕的最小总开销 II - 力扣(LeetCode) 排序贪心。 开销越大的越早切。 注意m或n为1的情况。 class Solution { public:long long minimumCost(int m, int n, vector<int>& horizontalCut, vector<int>&…...
vant 地址记录
vant ui 的官网地址记录 vant 4 Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. vant2 https://vant-ui.github.io/vant/v2/ vant3 Vant 3 - Lightweight Mobile UI Components built on Vue...
PHP项目实战:手把手教你从零对接易宝支付SDK(含回调处理避坑指南)
PHP实战:易宝支付SDK全流程对接与回调处理深度解析 支付系统作为电商平台的核心模块,其稳定性和安全性直接影响用户体验和平台收益。易宝支付作为国内主流支付解决方案之一,其SDK对接过程看似简单,实则暗藏诸多技术细节。本文将带…...
基于FPGA的SJA1000T CAN通信驱动代码功能说明
基于FPGA的CAN通信,FPGA驱动SJA1000T芯片代码,实现标准帧与扩展帧的通信驱动,已上板调通 品牌型号 CAN SJA1000T 与世面上的不同,代码不是SJA1000T芯片代码,而是驱动该芯片的代码。一、概述 本文档详细解读基于FPGA的…...
避开这些坑,你的芯片设计才能成功流片:CMOS制造工艺中的关键检查点详解
避开这些坑,你的芯片设计才能成功流片:CMOS制造工艺中的关键检查点详解 在芯片设计领域,流片失败往往意味着数百万美元的损失和数月的开发时间付诸东流。对于初入行的工程师而言,理解制造工艺中的潜在风险点比掌握正向设计流程更为…...
告别答辩 PPT 加班地狱!Paperxie AI:一键拿捏本科生的学术范儿演示
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 一、 答辩 PPT:压垮本科生的最后一根稻草? 论文定稿的喜悦,永远会被一句 “该做答辩 PPT…...
发票识别小助手:用OCR文字识别镜像自动读取发票信息
发票识别小助手:用OCR文字识别镜像自动读取发票信息 1. 项目背景与价值 在日常财务工作中,发票信息录入是一项耗时且容易出错的任务。传统的人工录入方式不仅效率低下,还容易因疲劳导致数据错误。OCR(光学字符识别)技…...
哈希表开放定址法增删改查简单实现
1.简介 在Java中分为HashMap和TreeMap,HashSet和TreeSet,C是map和unordered_map,set和unordered_set 一般哈希表的效率更优秀一些,通过下面代码测性能确实如此 查找 1.暴力查找O(N) 2.二分,性能O(logN),要求…...
从安装到实战:在快马生成项目中体验openclaw本地安装与即时数据抓取
从安装到实战:在快马生成项目中体验openclaw本地安装与即时数据抓取 最近在做一个数据采集的小项目,需要从网站上抓取一些公开信息。经过调研发现openclaw这个工具很适合我的需求,但网上关于它的本地安装和实际应用的完整教程比较少。于是我…...
解密Megatron-LM的显存魔法:从源码看recompute如何实现transformer大模型训练
Megatron-LM重计算技术深度解析:如何用显存优化训练千亿参数模型 当我们在谈论大模型训练时,显存管理就像高空走钢丝——稍有不慎就会因OOM(内存溢出)而崩溃。Megatron-LM作为NVIDIA开源的分布式训练框架,其重计算(re…...
TranslucentTB:重塑Windows任务栏视觉体验的轻量化方案
TranslucentTB:重塑Windows任务栏视觉体验的轻量化方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否曾遇到这样的困…...
如何用快马平台与jdk1.8特性十分钟搭建商品管理系统原型
今天想和大家分享一个快速搭建商品管理系统原型的经验。作为一个经常需要验证业务逻辑的后端开发,我发现用jdk1.8配合InsCode(快马)平台可以十分钟内完成从零到可运行的原型开发,特别适合敏捷开发场景。 为什么选择jdk1.8 企业级开发中jdk1.8仍然是主流选…...
