# JavaScript：运算符

var box = 100;
++box;
alert(box); //101 相当于box = box + 1;
--box;
alert(box); //100 相当于box = box - 1
box--;
alert(box); //99  相当于box = box - 1
box++;
alert(box); //100 相当于box = box + 1;

var box = 100;
var age = ++box; //age 值为 101 ,先加1后赋值
alert(age);

var box = 100;
var height = box++; //height 值为 100，先赋值后加1
alert(height);

var box = '89';
box++;
alert(box); //90,数值字符串直接转化为数值

var box = '89aa';
box++;
alert(box);//NaN,包含非数值的转换为NaN

var box = false;
box++;
alert(box);//1 false转为数值是0
var box = true;
box++;
alert(box);//2 true转为数值是1

var box = {
toString : function(){
return 1;
}

}; //1，不设置 toString 或 valueOf 即为 NaN
box++;
alert(box); //2

var box;
box++;
alert(box); //NaN

var box = 100;

var box = '89';

var box = 'ab';

var box = false;

var box = 2.3;

var box = {
toString:function(){
return 1;
}
};
alert(+box);//1，不设置 toString 或 valueOf 即为 NaN 

var box = 100;

var box = '89';

var box = 'ab';

var box = false;

var box = 2.3;

var box = {
toString:function(){
return 1;
}
};
alert(-box);//-1，不设置 toString 或 valueOf 即为 NaN


//加法
var box = 1 + 2; //等于 3

var box = 1 + NaN; //NaN，只要有一个 NaN 就为 NaN

var box = Infinity + Infinity; //Infinity

var box = -Infinity + -Infinity; //-Infinity

var box = Infinity + -Infinity; //NaN，正无穷和负无穷相加等 NaN

var box = 100 + '100'; //100100，字符串连接符，有字符串就不是加法

var box = '您的年龄是：'+ 10 + 20; //您的年龄是：1020，被转换成字符串

var box = 10 + 20 + '是您的年龄'; //30 是您的年龄，没有被转成字符串

var box = '您的年龄是：'+ (10 + 20); //您的年龄是：30，没有被转成字符串

var obj = {};
var box = 10 + obj; //10[objectObject]，如果有 toString()或 valueOf() 则返回 10+返回数的值
alert(box);

//减法
var box = 100 - 70; //等于 30

var box = -100 - 70 //等于-170

var box = -100 - -70 //-30，一般写成-100-(-70)比较清晰

var box = 1 - NaN; //NaN，只要有一个 NaN 就为 NaN

var box = Infinity - Infinity; //NaN

var box = -Infinity - -Infinity; //NaN

var box = Infinity - -Infinity; //Infinity

var box = -Infinity - Infinity; //-Infinity

var box = 100 - true; //99，true 转成数值为 1

var box = 100 - ''; //100，''转成了 0

var box = 100 - '70'; //30，'70'转成了数值 70

var box = 100 - null; //100，null 转成了 0

var box = 100 - 'Lee'; //NaN，Lee 转成了 NaN

var obj = {
toString : function(){
return '1';
}

};
var box = 100 - obj //NaN，如果有 toString()或 valueOf() 则返回 100-返回数的值
alert(box);

//乘法
var box = 100 * 70; //7000

var box = 100 * NaN; //NaN，只要有一个 NaN 即为 NaN

var box = Infinity * Infinity; //Infinity

var box = -Infinity * Infinity; //-Infinity

var box = -Infinity * -Infinity; //Infinity

var box = 100 * true; //100，true 转成数值为 1

var box = 100 * ''; //0，''转成了 0

var box = 100 * null; //0，null 转成了 0

var box = 100 * 'Lee'; //NaN，Lee 转成了 NaN

var obj = {
toString : function(){
return '1jgh1';
}

};
var box = 100 * obj  //NaN，如果有 toString()或 valueOf() 则返回 100*返回数的值
alert(box);

//除法
var box = 100 / 70; //1.42....

var box = 100 / NaN; //NaN

var box = Infinity / Infinity; //NaN

var box = -Infinity / Infinity ; //NaN

var box = -Infinity / -Infinity; //NaN

var box = 100 / true; //100，true 转成 1

var box = 100 / ''; //Infinity，

var box = 100 / null; //Infinity，

var box = 100 / 'Lee'; //NaN

var obj = {
toString : function(){
return '1';
}

};
var box = 100 / obj; //NaN，如果有 toString()或 valueOf() 则返回 100/ 返回数的值
alert(box);

/*

1.第一个操作数是对象，则返回第一个操作数；
2.第一个操作数的求值结果为 false，则返回第二个操作数；
3.两个操作数都是对象，则返回第一个操作数；
4.两个操作数都是 null，则返回 null；
5.两个操作数都是 NaN，则返回 NaN；
6.两个操作数都是 undefined，则返回 undefined；
*/

var obj = {};
var box =  obj || (5>3); //[object Object]

var box = (5>3)|| obj; //true

var obj1 = {};
var obj2 = {};
var box = obj1|| obj2; //[object Object]

var box = null || null; //null

var box = NaN || NaN; //NaN

var box = undefined || undefined; //undefined



/*

1.第一个操作数是对象，则返回第二个操作数；
2.第二个操作数是对象，则第一个操作数返回 true，才返回第二个操作数，否则返回 false;
3.有一个操作数是 null，则返回 null；
4.有一个操作数是 undefined，则返回 undefined。

*/

var obj = {};
var box =  obj && (5>3); //true

var obj = {};
var box = (5>4) && obj; //[objectObject]

var box = (3>4)&& obj; //false

var box = (5>4)&& null; //null

var box = undefined && undefined; //undefined


/*
3.逻辑非(NOT)：! 逻辑非运算符可以用于任何值。

1.操作数是一个对象，返回 false；
2.操作数是一个空字符串，返回 true；
3.操作数是一个非空字符串，返回 false；
4.操作数是数值 0，返回 true；
5.操作数是任意非 0 数值(包括 Infinity)，false；
6.操作数是 null，返回 true；
7.操作数是 NaN，返回 true；
8.操作数是 undefined，返回 true
*/
var box = !(5>4); //false

var box = !{}; //false

var box = !''; //true

var box = !'Lee'; //false

var box = !0; //true

var box = !8; //false

var box = !null; //true

var box = !NaN; //true

var box = !undefined; //true
alert(box);

• 本文已收录于以下专栏：

## javascript中得in运算符

1、For...In 声明用于对数组或者对象的属性进行循环/迭代操作。   　　对于数组 ，迭代出来的是数组元 素，对于对象 ，迭代出来的是对象的属性； var x va...
• alex8046
• 2014年10月29日 14:23
• 582

## JavaScript特殊运算符

• sysuzjz
• 2016年02月18日 17:09
• 861

## (javascript进阶） 运算符“||”和“&&”的巧妙用法

• ClydeKuo
• 2017年02月08日 16:06
• 8466

## JavaScript中的typeof运算符

• cuixiping
• 2009年07月11日 23:10
• 5320

## javascript运算符之相等与严格相等

• xautlily
• 2015年09月28日 22:14
• 588

## JavaScript的语法变量运算符

JavaScript中的基本语法
• jinhuoxingkong
• 2016年05月22日 14:42
• 1024

## 等号重构（operator=）函数中应该注意的问题

• spencerzou
• 2014年08月01日 11:10
• 1040

## JavaScript中逻辑运算符(布尔操作符)

• itpinpai
• 2017年04月18日 14:35
• 388

## JavaScript的typeof运算符的可能结果有哪些？

typeof运算符用来检测给定变量的数据类型。对一个值使用typeof运算符可能的返回值有： "undefined" —— 如果这个值没有定义 "boolean" —— 如果这个值是布尔值 "obje...
• github_39673115
• 2017年08月01日 17:56
• 300

## JavaScript实现call、apply和bind

• qq_27626333
• 2017年12月13日 17:29
• 351

举报原因： 您举报文章：JavaScript：运算符 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)