js操作符

js操作符

作用:操作数值
包括:一元操作符、布尔操作符、乘性操作符、加性操作符、关系操作符、相等操作符、条件操作符、复制操作符;

一元操作符

只能操作一个值

#####1、递增和递减操作符(前置型和后置型)

var age = 22
++ age;
console.log(age) // 30
// 类似 age = age + 1;
    
var age2 = 22
-- age2;
console.log(age2) // 21
// 类似 age2 = age2 - 1;
// 执行前置递增或递减的时候,变量的值都是在语句被求值以前改变的。
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2;
var num4 = num1 + num2;
// console.log(num3);
// console.log(num4);

这4个操作符对任何值都适用,(整数、字符串、布尔值、浮点数值、对象)

  • 包含有效数字的字符串:先将其转化为数值,再执行加减1的操作。(var a = ‘2’; console.log(a++))

  • 不包含有效数字的字符串:先将其转化为数值NaN。(var a = ‘s’; console.log(++a))

  • 布尔值:先将其转换为Number(false)/Number(true) 0/1,再进行操作。(var a = false; console.log(++a))

  • 浮点数:直接执行加减1的操作 (var a = 1.2; console.log(–a))

  • 对象:先调用他们的valueOf()或 toString()方法,在转换得到值

总结:前置型是先计算再返回数值,后置型是先返回数值再计算。

#####2、一元加和减操作符

一元加操作符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响;
在对非数值操作时,会先将其转化为number类型,再进行操作;

var s1 = '01';
var s2 = 1.1;
var s3 = false;
var s4 = 'q';
s1 = +s1;
s2 = +s2;
s3 = +s3;
s4 = +s4;

一元减操作符以一个加号(-)表示,放在数值前面,主要用于表示负数;

var s1 = '01';
var s2 = 1.1;
var s3 = false;
var s4 = 'q';
s1 = -s1;
s2 = -s2;
s3 = -s3;
s4 = -s4;

(一元加法对数字无作用,但对字符串却有有趣的效果,会把字符串转换成数字。)

布尔操作符(非、与、或)

#####1、逻辑非(!)

无论这个值是什么数据类型,这个操作符都会返回一个布尔值。首先将其转化为布尔值[ Boolean() ],然后再对其求反;遵循以下规则:

  • 如果操作数是一个对象,返回false;

  • 空字符串,返回true;

  • 非空字符串,返回false;

  • 数值0,返回true;

  • 任意非0数值,返回false;

  • 为null,返回true;

  • 为NaN,返回true;

  • 为undefined,返回true;

eg:

!{a:1} // false
!''; // true
!'blue'; // false
!0; //  true
!12345; // false
!NaN; true;
!undefined; // true
!false; // true

逻辑非操作符也可以用于将一个值转换为与其对应的布尔值;(!!)用2个!来表示,
同时使用2个逻辑非操作符,实际上就会模拟Boolean转型函数的行为;

console.log(!!'blue'); // true;
console.log(!!0); // false;
console.log(!!''); // false;
console.log(!!NaN); // false;
console.log(!!123); // true;

#####2、逻辑与(&&,有2个操作数)
eg: true && false; ====> false;
逻辑与操作符可以用于任何类型的操作数,而不仅仅是布尔值,如果有一个操作数不是布尔值的情况下,就不一定返回布尔值,遵循以下规则:

  • 如果第一个操作数为对象,则返回第二个操作数;

  • 如果第二个操作数为对象,则只有在第一个操作数的求值结果为true的时候才会返回该对象;

  • 如果两个操作数都为对象,则返回第二个操作数;

  • 如果第一个操作数为null,则返回null;

  • 如果第一个操作数为NaN,则返回NaN;

  • 如果第一个操作数为undefined,则返回undefined;

逻辑与操作符属于短路操作符,如果第一个操作数能够决定结果,就不会再对第二个操作数求值;
如果第一个操作数的求值结果为false,无论第二个操作数是什么值,返回结果都是false;

var obj = {a:2}; 
console.log(obj && 2)  // 2

var obj = {a:2}; 
console.log(true && obj)  // {a:2}
console.log(false && obj)  // false

var obj1 = {a:2}; 
var obj2 = {a:3};
console.log(obj1 && obj2)  // {a:3}

console.log(null && 2) // null

console.log(NaN && 'ee') // NaN

console.log(undefined && 'ee') // undefined

var found = true;
var result = (found && value);
console.log(result);//Uncaught ReferenceError: value is not defined

var found = false;
var result = (found && value);
console.log(result);// 输出

#####3、逻辑或(||)
两个操作数进行比较,有一个值为true 返回结果就为true,两个值都为false,才会返回false;它遵循以下规则:

  • 如果第一个操作数为对象,则返回第一个操作数;

  • 如果第一个操作数的求值结果为false,则返回第二个操作数;

  • 如果两个操作数都为对象,则返回第一个操作数;

  • 如果两个操作数为null,则返回null;

  • 如果两个操作数为NaN,则返回NaN;

  • 如果两个操作数为undefined,则返回undefined;

与逻辑非类似,逻辑或操作符也是短路运算符,也就是说,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了;

var found = true;
var result = (found || value);
console.log(result);//不会报错 输出为true

var found = false;
var result = (found || value);
console.log(result);//Uncaught ReferenceError: value is not defined
// &&  用于判断2个条件是否同时满足
// ||  用于判断2个条件里是否满足其中一种

##乘性操作符(乘法、除法、求模)

#####1、乘法(*)
如果参与乘性计算的某个操作数不是数值,后台会先使用Number()将其转换为数值,也就是说,空字符串将被当作0,布尔值将被当作1;
遵循以下规则:

  • 如果操作数都是为数值,执行常规的乘法计算,如果乘积超过了ECMAScript数值表示的范围,则返回Infinity 或 -Infinity;

  • 如果有一个操作数为NaN,则结果为NaN;

  • 如果Infinity与0相乘,则结果为NaN;

  • 如果Infinity与非0相乘,返回结果为Infinity或-Infinity;

  • 如果Infinity*Infinity,返回Infinity;

  • 如果某个操作数不是数值,后台会先使用Number()将其转换为数值,再应用上面的规则;

2 * 3 // 6
2 * NaN // NaN
Infinity * 0 // NaN
Infinity * 2 // Infinity
3 * '4' // 12
3 * false // 0

#####2、除法(/)

  • 如果操作数都是为数值,执行常规的除法计算,如果乘积超过了ECMAScript数值表示的范围,则返回Infinity 或 -Infinity;

  • 如果有一个操作数为NaN,则结果为NaN;

  • 如果是Infinity被Infinity除,结果是NaN;

  • 如果是0被0除,结果是NaN;

  • 如果是非零的有限数被零除,结果是Infinity或者-Infinity(1/0, -1/0。===> Infinity / -Infinity)

  • 如果是Infinity被任何非零的数值除,结果是Infinity或者-Infinity;

4 / 2  // 2
2 / NaN // NaN
NaN / 2 // NaN
'2' / 2 // 1

#####3、求模(%)
取余数;

3 % 2 // 1
2%1 / 0
2 % 0 //0
0 % 2 //0
'4' % 8 // 4

##加性操作符
#####1、加法

var result = 5 + 5;
var result2 = 5 + '5';
console.log(result); // 10
console.log(result2); // 55
// 如果有一个操作数是字符串,则将另一个操作数转化为字符串,然后再做拼接

var num1 = 5;
var num2 = 10;
var message = 'The sum of 5 and 10 is ' + num1 + num2;
// console.log(message);

#####2、减法

var result1 = 5 - true; // 4
var result2 = NaN - 1; // NaN
var result3 = 5 - 3; // 2
var result4 = 5 - ''; // 5  (Number('') =0)
var result5 = 5 - '2'; // 3  (Number('2') =0)
var result6 = 5 - null; // 5 (Number(null) =0)

##关系操作符
######包含小于(<),大于(>),小于等于(<=),大于等于(>=),返回都是布尔值

var a1 = 3 > 2; // true
var a2 = '23' < '3'; // true (通过字符编码进行比较)
var a3 = '23' < 3; // false (字符串和数值进行比较的时候,先将字符串转换为数值进再行比较)
var a4 = 'a' < 3; // false 
var a5 = NaN < 2; // false (任何操作数和NaN进行比较,返回的都是false)

##相等操作符

(相等和不相等是先转换再比较,全等和不全等是仅比较不转换)

#####1、相等和不相等

'NaN' == NaN      // false 
5 == NaN         // false
NaN == NaN       // false (A,B)
NaN != NaN       // true
false == 0      // true
true == 1       // true
true == 2       // false
undefined == 0  // false
null == 0       // false
'5' == 5        // true
false == 0      // true
true == 1       // true
  • 如果有一个操作数是布尔值,会先将其转换为数值进行比较

  • 如果有一个操作数是字符串,会先将其转换为数值进行比较

  • 如果有一个操作数是NaN或是有俩个操作数都是NaN,则相等操作符返回时false,不相等操作符返回true;

  • 在比较相等性的时候,不能将null和undefined转换成任何类型;

#####2、全等和不全等
除了在比较之前不转换以外,与相等和不相等操作符没有什么区别。
全等 [ === ]
不全等[ !== ]

var result1 = ('55' == 55); // true
var result2 = ('55' === 55); // false

var result1 = ('55' != 55); // false
var result2 = ('55' !== 55); // true

null == undefined   // true
null === undefined  // false
// null==undefined会返回true,因为它们是类似的值;
//但null===undefined会返回false,因为它们是不同类型的值。
//既然 null 和 undefined 的行为很相似,并且都表示一个无效的值,那么它们所表示的内容也具有相似性,即有 null == undefined   // true
// undefined 表示一个变量自然的、最原始的状态值,而 null 则表示一个变量被人为的设置为空对象

由于相等和不相等操作符存在类型转换的问题,而为了保持代码中数据类型的完整性以及严谨性,推荐使用全等和不全等操作符;

##条件操作符
条件运算符也叫三元运算符
语法:条件表达式 ? 语句1 : 语句2;

var a = 1, b = 2, c = 3;
//获取a和b中的最大值
var max = a > b ? a : b;
//获取a b c 中的大值
max = max > c ? max : c;

##赋值操作符
#####1、 简单的复制操作符由(=)号表示,其作用就是把右侧的值赋给左侧的值;

var num = 10; // 把10赋给了num

#####2、复合赋值操作符

  • 乘/赋值 (*=)

  • 除/赋值 (/=)

  • 模/赋值 (%=)

  • 加/赋值 (+=)

  • 减/赋值 (-=)

var num = 10;
num = num + 10;
num += 10;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值