一、JavaScript 算数运算符
用于数值运算
算数运算符 |
描述 |
+ |
加法 |
- |
减法 |
* |
乘法 |
/ |
除法 |
% |
求余/取模 |
++ |
自增(前++:先赋值,后运算;后++:先运算,后赋值) |
-- |
自减 |
1.1 "+" 除了算数运算符中的加法,也是连接符
<script>
var x = 1 + 2 + "3";
console.log('1 + 2 + "3" = ' + x); //33
x = "1" + 2 + 3;
console.log('"1" + 2 + 3 = ' + x); //123
x = "1" + (2 + 3);
console.log('"1" + (2 + 3) = ' + x); //15
// 除+外,其他运算符中的String类型会先转换为Number类型,然后才计算
x = "4" - 14;
console.log('"4" - 14 = ' + x); //-10
</script>
1.2 自增、自减
x++、++x是表达式,跟变量x不同
<script>
//n++:是原值
//++n:是新值
var n1 = 10, n2 = 20;
// n1++ ++n1 是表达式
var n = n1++; //n1=11 n=10
console.log('n = ' + n);
console.log('n1 = ' + n1);
var n = ++n1; //n1=12 n=12
console.log('n = ' + n);
console.log('n1 = ' + n1);
var n = n2--; //n2=19 n=20
console.log('n = ' + n);
console.log('n2 = ' + n2);
var n = --n2; //n2=18 n=18
console.log('n = ' + n);
console.log('n2 = ' + n2);
</script>
二、JavaScript 赋值运算符
向 JavaScript 变量赋值
赋值运算符 |
例子 |
等同于 |
= |
x=2 |
x=2 |
+= |
x+=2 |
x=x+2 |
-= |
x-=2 |
x=x-2 |
*= |
x*=2 |
x=x*2 |
/= |
x/=2 |
x=x/2 |
%= |
x%=2 |
x=x%2 |
三、JavaScript 关系运算符
关系运算符 |
描述 |
== |
等于 |
=== |
等值等型 |
!= |
不相等 |
!== |
不等值或不等型 |
> |
大于 |
< |
小于 |
>= |
大于或等于 |
<= |
小于或等于 |
? |
三元运算符 |
3.1 == 和 === 的区别
var x = 'hellow'; //String
var y = new String('hellow'); //Object
console.log(x == y); //true,由于值相等
console.log(x === y); //false,由于数据类型不同
var z = new String('hellow'); //创建了一个Hellow的String对象
console.log(z == y); //false,因为y、z在栈内存中分别创建对象,是不同的对象,故为false
3.2 isNaN()
var a = NaN;
//NaN 与 NaN 的值不一定相等,所以一般为false
console.log( a == NaN ); //false
//一般判断一个值是否为NaN,使用isNaN()
console.log( isNaN(a) ); //true
3.3 字符串中关系运算符的比较
//任何值和NaN比较:false
console.log(NaN >= "1"); //false
/*
比较两个字符串时,比较的是字符串的字符编码
比较字符编码时是一位一位进行比较
如果两位一样,则比较下一位
*/
//注意:在比较两个字符串型的数字时,一定要转型
console.log("11" < "5"); //true
console.log("abc" < "bcd"); //true
//比较中文时没有意义
console.log("戒" > "我"); //true
四、JavaScript 逻辑运算符
<script>
/*
! 非
- 若变量值为Boolean值
*/
var x = false;
console.log('!x = ' + !x); //true;
console.log('!!x = ' + !!x); //false
/*
! 非
- 变量值:非Boolean值
会先将其转为Boolean再进行判断
*/
var y = "-2";
console.log('!y = ' + !y); //false
console.log('!!y = ' + !!y); //true;
/*
&&:两个为true才为true;有一个为false则为false
- 对于非布尔值的情况
会先将其转为Boolean,然后再运算,并且返回原值
- &&与运算:
- 如果第一值为true,则必然返回第二个值
- 如果第一值为false,则直接返回第一个值
||:有一个为true即为true
- 非布尔值
- 若第一个值为true,则直接返回第一个值
- 若第一个值为false,则返回第二个值
*/
var a = "0" && NaN;
console.log('"0" && NaN = ' + a); //NaN
var b = undefined && "0";
console.log('undefined && "0" = ' + b); //undefined
var c = "0" || NaN;
console.log('"0" || NaN = ' + c); //0
var d = undefined || NaN;
console.log('undefined || NaN = ' + d); //NaN
</script>
五、JavaScript 类型运算符
类型运算符 |
描述 |
typeof |
返回变量的类型 |
instanceof |
返回 true,如果对象是对象类型的实例 |
5.1 typeof
var a = new String();
console.log(typeof a);
5.2 instanceof
5.2.1 instanceof 比较内置类型
/*
instanceof 左操作数是一个类,右操作数是标识对象的类
语法:
对象 函数
object instanceof constructor
*/
//比较自定义对象
function Foo() {}
function Bar() {}
Bar.prototype = new Foo();
new Bar() instanceof Bar; // true
new Bar() instanceof Foo; // true
// 如果仅仅设置 Bar.prototype 为函数 Foo 本身,而不是 Foo 构造函数的一个实例
Bar.prototype = Foo;
new Bar() instanceof Foo; // false
5.2.2 instanceof 比较内置类型
new String('foo') instanceof String; // true
new String('foo') instanceof Object; // true
'foo' instanceof String; // false
'foo' instanceof Object; // false
注:instanceof 操作符应该仅仅用来比较来自同一个 JavaScript 上下文的自定义对象。
六、JavaScript 位运算符
位运算符处理 32 位数。
该运算中的任何数值运算数都会被转换为 32 位的数。结果会被转换回 JavaScript 数。
位运算符 |
描述 |
例子 |
等同于 |
结果 |
十进制 |
& |
与(如果两位都是 1 ,则设置每位为 1) |
5&1 |
0101 & 0001 |
0001 |
1 |
| |
或(如果两位之一为 1 ,则设置每位为 1) |
5|1 |
0101 | 0001 |
0101 |
5 |
~ |
非(反转所有位) |
~5 |
~0101 |
1010 |
10 |
^ |
异或(同位取0,异位为1) |
5^1 |
0101 ^ 0001 |
0100 |
4 |
<< |
零填充左位移(通过从右推入零向左位移,并使最左边的位脱落) |
5<<1 |
0101 << 1 |
1010 |
10 |
>> |
有符号右位移(通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落) |
5>>1 |
0101 >> 1 |
0010 |
2 |
>>> |
零填充右位移(通过从左推入零来向右位移,并使最右边的位脱落) |
5>>>1 |
0101 >>> 1 |
0010 |
2 |