
2.4 表达式
表达式是指由运算符和操作数组合而成并且能够进行运算获得结果值的式子。所有的表达式都有返回值。
1.运算符的优先级
如果一个表达式中有多个不同的运算符,这些运算符进行运算的时候,就要考虑运算符的优先级问题,就是先运算谁和后运算谁的问题。最基本优先策略是““先乘除,后加减”,其次遵循算术运算符优先于关系运算符,关系运算符优先于逻辑运算符,逻辑运算符优先于赋值运算符的规律,具体优先级顺序如表2-8所示。
表2-8 JavaScript运算符的优先级

2.表达式中类型转换
表达式通常要求操作数的数据类型是相同的,例如进行加减乘除运算的表达式,操作数全是数值型的,进行逻辑运算的表达式其操作数的数据类型全是布尔型的等诸如此类的情况。但是,在JavaScript中却没有这么严格的要求,它是一种弱类型的程序设计语言,允许运算符对数据类型不匹配的操作数进行运算。主要原因是JavaScript会根据运算符的特性和操作数的类型进行隐式类型转换。JavaScript进行转换的形式主要有以下几种。
(1)+运算符,有以下两种情况。
• 如果两个操作数中有一个为字符串,那么JavaScript认为是进行字符串连接运算,并把不是字符串类型的操作数转换成字符串。
• 如果两个操作数都不是字符串,那么JavaScript认为是进行加运算。
(2)其他运算符:如果操作数类型不符合当前运算符运算类型,那么JavaScript会把操作数改为相应的类型的值再进行运算。例如,*运算会要求操作数全部是数值型。
试一试,下面几个表达式的值分别是多少?
(1)求表达式10+30、10+“30”“10”+30、“10”+“30”的值。
(2)求表达式10-30、10-“30”“10”-30、“10”-“30”的值。
(3)求表达式true+10、true+“10”、true+false、true-false的值。
(4)求表达式“a”-10的值。