<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>operator</title>
<script>
/*
ECMAScript操作符能够应用到字符串、数字值、布尔值和对象(与其他编程语言的区别)
应用于字符串、布尔值和对象时,会按照特定的规则先进行转换
应用于对象时,相应的操作符通常都会调用对象的valueOf()或toString()方法,以便取得可以操作的值
一元操作符:只能操作一个值的操作符
1,递减和递增操作符
前置递增和前置递减(计算机科学,副效应)
后置递增和后置递减
2,一元加和减操作符(作用跟数学书上一致)
var num = +12;
var num1 = -23;
位操作符
布尔操作符
不能在布尔操作符中使用未定义的变量!!!
1,逻辑非:"!" 无论这个值是什么数据类型,这个操作符都会返回一个布尔值
a,逻辑非操作符首先会将它的操作数转换成为一个布尔值,然后对其求反
b,同时使用两个逻辑非操作符 == Boolean()函数作用
2,逻辑与:"&&" 短路操作符,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值(例如false)
如果有一个操作数不是布尔值,逻辑与不一定会返回布尔值
第一个操作数为对象,则返回第二个操作数
如果第一个操作数的求值结果为true,则返回第二个操作数
如果两个操作数都是对象,则返回第二个操作数
一个操作数是NaN --> NaN
一个操作数是null --> null
一个操作数是undefined --> undefined
3,逻辑或:"||" 短路操作符,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值(例如true)
如果有一个操作数不是布尔值,逻辑与不一定会返回布尔值
第一个操作数为对象,则返回第一个操作数
如果第一个操作数的求值结果为false,则返回第二个操作数
如果两个操作数都是对象,则返回第一个操作数
两个操作数都是NaN --> NaN
两个操作数都是null --> null
两个操作数都是undefined --> undefined
乘性操作符:乘法,除法,求模
注意点:
乘法:
a, 如果Infinity 与 0相乘,结果为NaN;
b, 如果Infinity 与 非0数值相乘,结果为Infinity或-Infinity;
c, 如果一个操作数不是数值,则在后台调用Number()将其转换成为数值,然后在计算
除法:
a, Infinity / Infinity, 0 / 0 --> NaN
b, 非零的有限数 / 0, Infinity / 非零的有限数 --> Infinity or -Infinity
c, 如果一个操作数不是数值,则在后台调用Number()将其转换成为数值,然后在计算
加性操作符
注意点:
(Infinity 与 -Infinity存在抵消情况时,结果为NaN)
加法:
a, Infinity + (-Infinity) --> NaN;
b, +0 + (-0) --> +0 ;
c, 如果有一个操作数是字符串 --> 拼接
减法:
a, 如果有一个操作数是字符串 --> 将对应的字符串自动转换成数值
关系操作符:<, >, <=, >=
a, 数值与字符串,布尔值,对象进行比较,将字符串、布尔值、对象转换成数值后再执行比较
b, 两个字符串比较 --> 比较字符串对应的字符编码值
相等操作符
相等(==)和不相等(!=) -- 先转换在比较(强制转型)
注意点:
a, null == undefined --> true
b, 比较相等性之前,不能将null 和 undefined转换成其他任何值
undefined == 0 --> false
null == 0 --> false
全等(===)和不全等(!==) -- 仅比较而不转换
因为相等和不相等操作符存在类型转换问题,为了保持代码中数据类型的完整性,建议使用“全相等”和“不全相等”操作符
条件操作符:三元运算符
var maxValue = (numa > numb) ? numa : numb;
赋值操作符
复合赋值操作
逗号操作符
var num1 = 1, num2 = 2, num3 = 3;
var num = (1,2,3,8,3); // num = 3 自左向右
*/
// 一元操作符
var s1 = "2";
var s2 = "12z";
var b = false;
var f = 1.4;
var o = {
valueOf: function(){
return -1;
}
};
s1 ++;
s2 ++;
b ++;
f --;
o --;
// 先转换成数值变量,再执行加减1的操作
// console.log(s1);
// console.log(s2);
// console.log(b);
// console.log(f);
// console.log(o);
// 布尔操作符
// console.log(! hhjhj);
console.log(12 && true);
console.log(false && 12);
console.log((null == undefined) && 23);
console.log(56 && 34);
console.log('-----------');
console.log(12 || false);
console.log(false || 12);
console.log((null == undefined) || 23);
console.log(56 || 34);
// var found1 = false;
// var result1 = (found1 && someUndefinedValue1); // 发生错误,修改:将found1的值改为false
// alert(result1);
// var found2 = true;
// result2 = (found2 || someUndefinedValue2);
// alert(result2);
// 利用逻辑或的行为来避免为变量赋null或undefined值,推荐使用!!!
// var myProject = preferredObject || backupObject;
// 乘性操作符
console.log(Number.POSITIVE_INFINITY * 0); // NaN
console.log(Number.POSITIVE_INFINITY * -23); // -Infinity
console.log('12' * 2);
console.log('--------------');
console.log(Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY);
console.log(12 / -0);
console.log(Number.POSITIVE_INFINITY / 12);
// 加性操作符
console.log(5 + 5);
console.log(5 + '5');
var message = 'the sum of 5 and 10 is ' + (5 + 10);
console.log(message);
console.log(5 - '52');
console.log(5 - '');
console.log(5 - null);
console.log(5 - undefined);
// 关系操作符
console.log('fadf'< 'dfsf'); // false
console.log('23' < 3); // false
console.log('23'<'3'); // true
console.log(NaN >= 3); // false
console.log(NaN < 3); // false
// 在与NaN进行比较时,以上的两个操作都是返回false
// 相等操作符
console.log('55' == 55); // true
console.log('55' === 55); // false 因为不同的数据类型不相等
console.log(null == undefined); // true 因为他们是类似的值
console.log(null === undefined); // false 因为他们是不同类型的值
</script>
</head>
<body>
</body>
</html>
让学习“上瘾”,成为更好的自己!