js运算符(回顾)

本文详细介绍了JavaScript中的各种运算符,包括加号运算符、乘除法及乘方运算、模运算、位运算,以及比较和逻辑运算符。特别讨论了全等于运算符与Object.is的区别,并给出了运算符的优先级规则。

前言

变量和数据类型,解决数据存放问题[数据的表达]
运算符,解决数据运算的问题[数据的加工]

操作符和操作数

操作符:运算符,参与运算的符号
操作数:参与运算的数据,也称之为"元”
操作符不一定只有一个符号
操作符出现在不同的位置,可能具有不同的含义
常见操作符,如下:
= 表示赋值符号,将右边的数据赋值给左边
. 表示访问符号,用于访问对象的属性
[] 表示访问符号,用于访问对象的属性
() 表示函数调用

按操作数数量区分类

  1. 一元(目)运算符:() . []
  2. 二元(目)运算符:+ - + % =
  3. 三元(目)运算符:?:

功能区分类

  1. 算术运算符(数学)
  2. 比较运算符
  3. 逻辑运算符
  4. 位运算符
  5. 其他

js运算符

加号运算符 +

1.加法运算
2.任何数据类型的值 + 字符串 = 都等于字符串

乘、除法运算符 * / 乘方 **

var a = 4 / 2;  //2
var b = 0 / 0;   //NaN
var c = 1 / 0;  //Infinty
var d = -1 / 0; //-Infinty
var e = 2 ** 3;// 8

模尔运算符 %

var a = 9 / 2;  //1

数字枚举的位运算

与运算符 &
按二进制,左右两边均为真,整体为真,其余为假

var a = 3 & 1;  //1
//即 11  和  01 比对,得到二进制 01
var b = 4 & 1;   //0

或运算符 |
有真为真,无真为假

var a = 3 | 1;  //3
//即 11  和  01 比对,得到二进制 11
var b = 4 | 1;   //5

非运算符 ~

var a = 3 ^ 1;  //2
//即 11  和  01 比对,得到二进制 10
var b = 4 ^ 1;   //5

异或运算符 ^

var a = 3 ^ 2;// 1
//0011^0010
//结果:0001

加加运算符 ++

++符号,放前面,表示先进行 ++ 运算,再执行js语句

var e = 5;
var f = ++e + 1;
console.log(e);//6
console.log(f);//7

++符号,放后面,表示先执行js语句,再进行 ++ 运算

var e = 5;
var f = e++ + 1;
console.log(e);//6
console.log(f);//6

例题:

let x=1;
Iety=x+x++*(x=x+x++*++x)+x;
console.log(y);//21

逗号运算符 ,

先执行前面的,返回后面表达式

var a = (1 - 1 , 1 + 1 );       2

js比较运算符

大小比较细节

(1) 两个字符串比较大小,比软的是享符串的字符编码 。
(2) 如果一个不是字符串,并且两个都是原始类型,将它们都转换为数字进行比较
(3) NaN 与 任何数字比较,得到的结果都是false
(4) Infinity 比 任何数字都大
(5) -Infinity 比 任何数字都小
(6)如果其中一个是对象,将对象转换为原始类型,然后按照规则(1)或规则(2)进行比较

大于 >

var bool = 1 > 2;//false

等于 ==

不考虑数据类型,字符串String会隐式类型转换为 Number

var bool = 1 == '1';//true

注意:
1.系统定义 undefined == null
2.对象 == 字符串,对象转为字符串类型再比较
3.对象 == 对象,主要看空间地址

全等于 ===

需要看数据类型,并且值是否相同

var bool = 1 == = '1';//false

注意:NaN ==》 Not a Number 不等于任何东西,包括它自己

undefined,null 不等于任何一个数据类型,但是,undefined == null

undefined == '0';//false
null == 0//false

Object.is 与 === 的区别

object.is 同值相等
=== 零值相等

console.log(NaN === NaN); //false
console.log(Object.is(NaN, NaN)); //true
console.log(+0 === -0); //true
console.log(Object.is(+0, -0)); //false

重写 Object.is

Object.prototype.myIs = function (x, y) {
  if (x === y) {
    // 针对+0 不等于 -0的情况
    return x !== 0 || 1 / x === 1 / y;
  }
  //针对NaN的情况
  return x !== x && y !== y;
};
// ES5
Object.defineProperty(Object, "myIs", {
  value:
    function(x, y) {
      if (x === y) {
        // 针对+0 不等于 -0的情况
        return x !== 0 || 1 / x === 1 / y;
        // 1/+0 Infinity  1/-0 -Infinity
      }
      // 针对NaN的情况
     return x !== x && y !== y;
     //NaN !== NaN true
    },
  configurable: true, // 可配置性,默认为false    能否删除
  enumerable: false, // 可枚举性,默认为false     
  writable: true, // 可重写性,默认为false
});

逻辑运算符

js中 6大假值

false, undefined, null, NaN, 0, '' 

逻辑与   &&

全真才为真,有一个假则为假(遇假就停),可用于短路语句

var a = 2 && 2 && 0 + 2 + 3;//5

逻辑或 ||

var a = 0 || 2 || 0 + 2 + 3;//2

逻辑非 !

返回一个布尔值

var a = !1;//false
var b = !!1;//true

js运算符的优先级

括号运算符优先级最高
赋值运算符优先级最弱
&& 的优先级 大于 || 的优先级 – 例题
new(带参数列表) > 函数调用 > new(无参数列表) – 例题
js运算符优先级

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳晓黑胡椒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值