表达式和运算符详解-创新互联
表达式
表达式是ECMAscript中的一个‘短语’,解释器会通过计算把它转化成一个值,最简单的表达式是字面量或者变量名。
站在用户的角度思考问题,与客户深入沟通,找到方山网站设计与方山网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网络空间、企业邮箱。业务覆盖方山地区。例如:5 //数字字面量
“xiongbao”//字符串字面量
{x1,y2}对象字面量,对象表达式
[1,2,3]数组字面量,数组表达式
funciton(N)(return x+y) 函数字面量,函数表达式
合并简单表示创建复杂表示是
box+5 //加法运算符表达式
typeof(box)查看数据类型的表达式
box>8 逻辑运算表达式
1 一元运算符
(1)递增++和递减 - -
var box = 100;
++box //box = box + 1 ;
box++ //box= box +1 ;
(2) 前置和后置的区别
前置 运算先累加或者累减再赋值;
后置 先赋值再累加或者累减
var box = 100;
var age = box++ //box = 100+1 赋值给age
var age = ++box // age = box;然后box+1;
(3)其他类型运用一元运算符
字符串类型
A: var box = “89”;
box++ // 对于数字字符串 有隐形的转换功能,自动转化成数字类型
B:var box = “ab”;
box++ // 字符串包含非数字值转换为NaN
布尔类型
var box =false;
box++ //false转换成数值是0,累加1 结果为1;
对象类型
var box = {
toString:function(){ return}
};
box++ //结果为1 不执行toString()或者value() 方法为NaN
(4)一元加减运算符
1.用于类型转换
2.用于算术运算
3.加法用于取整,减法用于取负。
var box = 1;
-box ;
+box;
2.算术运算符
ECMAscript定义了五个算术运算符,加(+)减(-)乘(*)除(/)求模(取余)。
如果在算术运算的值不少数值,那么后台会自动调用number()函数将其转化成数值。
(1) 加法
a如果都是数值
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 正无穷和负无穷为非负数
var box = +0 加 +0 ; // 结果为+0
var box = -0 加 -0 ; // 结果为-0
var box = +0 加 -0 ; // 结果为+0
b如果一个操作数是字符串
b1: 如果两个数都是字符串,则讲两个字符串拼接起来
var box = a + b ; // 结果是ab
b2:如果只有一个是字符串,则将不是的字符串变成字符串,再拼接起来
var box = 7 + “9”; // 结果是79
c 如果操作数 是对象和布尔值
调用他们的toString()获得相应的字符串值,再利用相关的字符串值
D 如果是undefined 和 null
则调用string()函数并取得字符串“undefined”和“null”。
(2) 减法
a如果都是数值
var box = 1+2; //结果为3 如果两个操作符都是数值,则执行常规的算术减法操作并返回结果。
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 = +0 减+0 ; // 结果为+0
var box = +0 减 -0 ; // 结果为-0
var box = -0 加 -0 ; // 结果为+0
b如果一个操作数是字符串,布尔值,Null或者undefined
先在后台调用number()函数将其转化为数值,然后再根据前面规则执行减法计算。如果转换的结果是NaN,则减法的结果就是NaN。
c 如果一个操作数是对象
则调用对象的valueOf()方法以取得该对象的数值。
如果得到的结果是NaN,则减法的结果就是NaN。
如果对象没有valueOf()方法,则调用toString()方法并将得到的字符串转化为数值。
(3) 乘法 符合(*)
var box = 10*70; //结果为700
var box = 1*NaN //结果为NaN 如果一个操作符是NaN 就为NaN
var box = Infinity * Infinity //结果为 Infinify
var box = -Infinity*- Infinity //结果为Infinify
var box = Infinity * -Infinity // 结果为-Infinity
var box = 10*true; // 结果为100,true转成数值为1
var box = 10* “ ”; // 结果为0 “ ”转成了0
var box = 10*null; // 结果为0 null转成了0
var box = 10*“lee”; // 结果为NaN lee转成了NaN
var box = 10* 对象; // 结果为NaN
小结
a如果操作数都是数值,执行常规的乘法计算,俩个正数或者两个负数相乘结果为正数,如果有一个操作符有符合,结果为负数。如果超过ECMAScript的数值范围,则返回Infinity或者-Infinity。
b如果一个操作符是NaN结果就是NaN
c 如果是Infinity与0相乘,则结果是NaN;
d 如果是Infinity与非0相乘,则结果是Infinity或者-Infinity,取决于符号操作数的符合。
e 如果Infinity * Infinity,结果是Infinity。
f 如果一个操作数不是数值,则在后台调用Number() 将其转换为数值,在应用上面的规则
(4) 除法(/)
var box = 10/7; //结果为1.42
var box = 1/NaN //结果为NaN 如果一个操作符是NaN 就为NaN
var box = Infinity / Infinity //结果为 NaN
var box = -Infinity/- Infinity //结果为NaN
var box = Infinity /-Infinity // 结果为NaN
var box = 10/true; // 结果为100,true转成数值为1
var box = 10/ “ ”; // 结果为Infinity
var box = 10/null; // 结果为Infinity
var box = 10/“lee”; // 结果为NaN lee转成了NaN
var box = 10/ 对象; // 结果为NaN
小结
a如果操作数都是数值,执行常规的除法计算,俩个正数或者两个负数相除结果为正数,如果有一个操作符有符合,结果为负数。如果超过ECMAScript的数值范围,则返回Infinity或者-Infinity。
b如果一个操作符是NaN结果就是NaN
c 如果是Infinity被Infinity除,则结果是NaN
d 如果是零被零除,则结果是NaN
e如果是非零的有限数被零除,则结果是Infinity或者-Infinity,取决于符号操作数的符合
f如果是Infinity被任何非零数值除,则结果是Infinity或者-Infinity,取决于符号操作数的符合
f 如果Infinity * Infinity,结果是Infinity
d 如果一个操作数不是数值,则在后台调用Number() 将其转换为数值,在应用上面的规则
(5) 求模(取余%)
var box = 10%3; //结果为1
var box = 1%NaN //结果为NaN
var box = Infinity %Infinity //结果为 NaN
var box = -Infinity%- Infinity //结果为NaN
var box = Infinity%-Infinity // 结果为NaN
var box = 10%true; // 结果为0
var box = 10%“ ”; // 结果为Nan
var box = 10%null; // 结果为NaN
var box = 10%“lee”; // 结果为NaN
var box = 10%对象; // 结果为NaN
小结
a如果操作数都是数值,执行常规的除法计算,返回除得的余数
b如果被除数是无穷大值而除数是有限值,结果就是NaN
c 如果被除数是有限大的数值而除数是0,则结果是NaN
d 如果Infinity被Infinity除,则结果是NaN
e如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数
f如果被除数是零,则结果是零
d 如果一个操作数不是数值,则在后台调用Number() 将其转换为数值,在应用上面的规则
3.关系运算符
用于进行比较的运算符称为关系运算符:小于(<),大于(<),小于等于(<=),大于等于(>=),相等(==),不等(!=),全等【恒等】(===),不全等【不恒等】(!==)。
var box = 3 < 2 ; // 关系运算符大多返回一个布尔值
var box = “3” >22; // 字符串会被转化成数值,再比较
var box = “3” >“22”; // 如果两个都是字符串,会对第一个字符进行比较,3>2
var box = 对象 ; //false;
var box = 2 > {
toString:funtion(){
return 1;
}
}
var box = "a">"b"; //97 >98 字符编码进行比较
var box = "a">"B"; //97 >66 字符编码进行比较
总结:
1.俩个操作数都是数值,则数值比较
2.两个操作数都是字符串,则比较两个字符串对应的字符编码值
3.如果一个操作数是数值,则将另外一个操作数转化为数值,然后进行数值比较
4.如果一个操作数是布尔值,则先将其转化成数值,然后再执行比较
5如果一个操作数是对象,则先调用valueof()方法或toString()方法,再用结果比较
相等和不相等------先转换再比较;全等和不全等------仅比较而不转换
var box = 2 == 1; //true
var box = “2” == 2; //true “2”会转成数值2
var box = false==0; //true false转成数值就是0;
var box =“a” == “A”; //false 转换后的编码不一样
var box = 2 =={} ; // false 执行toString()或 ValueOf()会改变
var box = 2 ==NaN; //false , 只要有NaN,都是false
var box = { } == {} // false 比较的是他们的地址,每个新建对象的引用地址都不同
var age = { };
var height = age;
var box = age ==height; // true,应用地址一样,所以相等
var box = “2”===2; // false 值和类型都必须相等
var box = 2!==2; // false 值和类型都相等了
总结
1.如果一个操作数是布尔值,则先将其转换成数值,true是1,false是0
2.如果一个操作数是字符串,则将其转成数值再比较
3.如果一个操作数的对象,则先调用valueOf()或toString()方法再返回值比较
4.不转换的情况下,null等于undefined
5.如果有一个操作符是NaN,则相等操作符返回false,不相等操作符返回true;NaN不等于NaN
6.如果两个操作数都是对象,则比较透明是否是同一个对象,如果都指向同一个对象,怎返回true,否则返回false
7.在全等和不全等的比较中,值和类型都相等,才返回true,否则返回false。换句话,在操作数不转换的情况下相等才是全等。
3.布尔运算符
逻辑操作符:非(not)、与(and)、或(or)。
逻辑非
逻辑非由一个叹号(!)表示,应用于任何类型。这个操作符有转换功能,把操作数转换成布尔值,然后再对其求反。返回结果只有真true和假false。
例子
alert(!false) ; //true
alert(!“blue”); //false
alert(!0); //true
alert(!NaN); //true
alert(!“”); //true
alert(!12345); //false
总结:
1.如果操作数是一个对象,返回false
2.如果操作数是一个非空字符串,返回false
3.如果操作数是任何非0数值(包括Infinity),返回false
4.如果操作数是一个空字符串,返回true
5.如果操作数是数值0,返回true
6.如果操作数是数值null,返回true
7.如果操作数是数值NaN,返回true
8.如果操作数是数值undefined,返回true
逻辑与
逻辑与操作符(&&)表示。逻辑与操作符,属于短路操作,如果第一个操作能够决定结果,那么就不会再对第二个操作数求值。如果第一个操作数是false,那么第二个值无论是什么,结果都是false。
var result = true && false
x == 0 && y == 0 //只有x和y都为0,才会返回true.
逻辑与操作适应任何类型的操作数,不仅是布尔操作。
规则如下
1.如果第一个操作数是对象,责返回第二个操作数
3.如果第二个操作数是对象,则只有在第一个数的数值结果为true的情况下才会返回该对象
4.如果俩个操作数都是对象,则返回第二个操作数
5.如果第一个操作数是null,则返回null
6.如果第一个操作数是NaN,则返回NaN
7.如果第一个操作数是undefined,则返回undefined
注意:不能在逻辑与操作中实用未定义的值,会报错
逻辑或
逻辑或操作符由(||)表示。逻辑或操作符也是短路操作符,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了,俩个操作数都为false,才会返回false.
如果有一个操作数不是布尔值,逻辑或不一定返回布尔值。
规则如下:
1.如果第一个数是对象,则返回第一个操作数
2.如果第一个操作数的求值结果为false,则返回第二个操作数
3.如果两个操作数都是对象,则返回第一个操作数
4.如果俩个操作数都是null,则返回null
5.如果俩个操作数都是NaN,则返回NaN
6.如果俩个操作数都是undefined,则返回undefined
条件运算符
javaScript唯一一个三元运算符,写成“?:”。
例如:x > 0 ? x : -x //求x的绝对值
解释:如果x大于0,返回x;如果x小于0,则返回-x。
var max = (num1 > num2) ? num1:num2
赋值操作符
简单的复制操作符(=)
复合赋值操作符
num += 10和 num = num+10一样
乘赋值(*=)
除赋值(/=)
加赋值(+=)
减赋值(-=)
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻标题:表达式和运算符详解-创新互联
转载注明:http://pwwzsj.com/article/ghojj.html