JavaScript运算符
算数运算符
+ - * / %(取余符号)
- 不同数据类型之前是没有办法进行运算。自动数据类型转换:那么不同数据类型的数据,需要先自动数据类型转换成同一数据类型,再进行后续的运算。
- 任何类型的数据和字符串类型的数据做相加(+)操作时,其他数据类型会自动的转换为字符串类型。此时的相加(+)不再是数学意义上的加法,而是表示“拼接”的意思。
- 字符串做相加运算之外的运算,那么字符串会先转成数字,再进行运算。
1. "100"纯数字字符的字符串,可以直接转成数字
2. "100a"有非数字字符的字符串,转成NaN(not a number)
3. 任何数据和NaN做数学运算,都是NaN。
除字符串以外的数据,和数字进行算数运算的时候,将别的数据类型先转成数字再进行运算。
计算机在进行算数运算的细节:
- 计算机在进行小数运算的时候,绝对有误差(尽量使用整数计算)
- 除数可以为0
赋值运算符
普通赋值运算:=
功能:将等号右边的值,赋值给等号左边的变量。
复合赋值运算:x=
+= -= *= /= %=
表达式
将任何运算符和操作数组合的式子叫做表达式。
- 表达式的值
- 表达式的功能
一元运算符:
a++ ++后置,先取a的值,然后对a进行+1操作
++a ++前置,先对a进行+1操作,然后取a的值
a-- --后置,先取a的值,然后对a进行-1操作
--a --前置,先对a进行-1操作,再去a的值
关系运算符
> < >= <= == != 判断值相等
=== !== 既得判断值相等,还需要判断数据类型也相等。
关系运算里面的规则(自动数据类型转换):
和其他运算符一样,当关系运算符操作非数值时要遵循以下规则:
- 两个操作数都是数值,则数值比较;
- 两个操作数都是字符串,则比较两个字符串对应的字符编码值;
<1>如果都是单个字符,直接比较ASCII码值大小 <2>逐位进行比较(第一位和第一位比较,第二位和第二位比较...) 一旦比较出大小,直接得出结果。
- 两个操作数有一个是数值,则将另一个转换为数值,再进行数值比较;
- 两个操作数都是字符串,则比较两个字符串对应的字符编码值;
- 两个操作数都是数值,则数值比较;
在相等和不等的比较上,如果操作数是非数值,则遵循以下下规则:
- 一个操作数是布尔值,则比较之前将其转换为数值,false 转成 0,true 转成 1;
- 一个操作数是字符串,则比较之前将其转成为数值再比较
- 一个操作数是 NaN,则==返回 false,!=返回 true;并且 NaN 和自身不等;
- 一个操作数是布尔值,则比较之前将其转换为数值,false 转成 0,true 转成 1;
逻辑运算符
与运算
格式:表达式1 && 表达式2 规则:两个表达式都为true的时候,才为true。 短路操作:如果表达式1为false,那么表达式2就不执行了,直接得结果为false。
或运算
格式:表达式1 || 表达式2
规则:两个表达式都为false的时候,才为false。 短路操作:如果表达式1为true,那么表达式2就不执行了,直接得结果为true。
非运算
格式:!表达式
规则:现将原有的表达式自动数据类型转换成布尔值,然后取反。 规律: 1.操作数是一个空字符串,返回 true; 2.操作数是一个非空字符串,返回 false; 3.操作数是数值 0,返回 true; 4.操作数是任意非 0 数值(包括 Infinity),false; 5.操作数是 NaN,返回 true; 6.操作数是 undefined,返回 true; 口诀:非0即真,非空即真。