数据运算和运算规则
1.1 js表达式
1.1.1 简单表达式和复杂表达式
1、简单表达式:仅仅由文字组成;
2、复杂表达式:更多的表达式中包含变量、函数、函数调用以及其他表达式,可以用运算符将简单表达式组合,创建复合表达式,运算符可以是js中任意的运算符。
1.1.2 赋值表达式和单值表达式
1、赋值表达式:用于变量赋值;
2、单值表达式:纯粹是被计算为单个值。
1.2 算数运算符
运算符号 | 意义 | 运算符号 | 意义 |
+ | 加法运算 | % | 取余数 |
- | 减法运算 | ++ | 累加 |
* | 乘法运算 | -- | 递减 |
/ | 除法运算 |
注意事项:
1、运算溢出:数字类型的变量有一个范围,超出范围就会导致溢出,算术运算不会自动抛出异常,因此需要自己来处理。
2、进行算术运算时,两端的值可能不是数字,那么会尝试将该数据转换为数字,如果能转换成数字,则可以进行数字运算,否则返回非数字常量NaN;
但有一个例外,就是加法运算符,因为加法运算符可以用来当作字符串运算符。因此会有另外的一些规则。
(1)当两个或多个数字使用“+”运算符时,执行加法运算符;
(2)当单个数字与其他类型的数据使用“+”运算符时,首先会将两个表达式的值转换为字符串,然后执行字符串运算。
document.write(10+new Array("40",30)); // 1040,30 首先会将数组转换成字符串
document.write(10+new Array(40,30)); // 1040,30 首先会将数组转换成字符串
(3)当多个数字与其他类型的数据使用“+”运算符时,首先会从左到右,根据运算符两边的数据类型进行判断,是采用算术运算还是字符串运算。
document.write("10"+20+5); // 10205
document.write(10+20+"5"); // 305
1.3 赋值运算符:用来为变量或者常量赋值,可以让程序精简,提高程序的执行效率
运算符号 | 意义 |
= | 将右边的值赋到左边 |
+= | 将右边的值加左边的值,并将结果值赋给左边。 |
-= | ~减~~ |
*= | ~乘~~ |
/= | ~除~~ |
%= | ~取余~~ |
&= | |
<<= | |
|= | |
>>= | |
>>>= | |
^= |
1.4比较运算符和逻辑运算符
比较运算符表:
运算符号 | 意义 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
=== | 如果两个表达式(包括它们的数据类型)相等,则结果为 true |
!== | 与===相反 |
逻辑运算符表:
运算符号 | 意义 |
&& | 并且,两边表达式必须同时为true |
|| | 或者,一边成立即可 |
! | 不,非 |
&&= | 进行&&运算,并将运算结果赋给左边的表达式。 |
||= | 进行||运算,并将运算结果赋给左边的表达式。如:x||=y;=>x=x||y |
===确定是否相等,取决于参数的数据类型:
(1)数字和逻辑值按值进行比较,如果它们具有相同的值,则相等。
(2)如果字符串表达式具有相同的字符数,而且这些字符都相同,则这些字符串表达式相等。
(3)表示对象、函数、数组和函数的变量按引用进行比较。如果两个变量引用同一个对象、数组或函数,则它们相等。而两个单独的数组即使具有相同数量的元素,也永远不会视为相等。
var str="abc";
var str1 = new String("abc");
var str2 = new String("abc");
var str3 = str1;
document.write(str==str1); //true
document.write(str1==str2); //false
document.write(str1==str3); //true
document.write(str1===str2); //false
document.write(str1===str2); //false
document.write(str1===str3); //true
1.4.1特殊值的比较
document.write(NaN==NaN); //false
document.write(NaN===NaN); //false
document.write(null==undefined); //true
document.write(null===undefined); //false
1.5其他运算符
运算符号 | 意义 |
[] | 用指定的元素访问数组中的元素或者实例化一个新数组,它还能访问对象的属性,方括号运算符也被称为下标运算符 |
, | 计算表达式1,然后计算表达式2,依次类推。 |
?: | 三元条件运算符 |
. | 访问对象的属性和方法,定义包路径。 |
in | 计算属性是否为特定对象的一部分,经常用在for in循环中。 |
instanceof | 计算表达式的原型链是否包含function的原型对象 |
new | 构造器方法,用来创建实例。 |
{} | 定义块,还可以创建并初始化一个新的Object实例。 |
() | 对一个或多个参数执行分组计算,执行表达式的顺序计算,或者括住一个或多个参数并将它们作为参量传递给括号前面的函数。 |
/ | 如果 用在字符之前和之后,则表示字符具有字面值,并被视作一个正则表达式,而不是一个变量、字符串或其他js元素,除此之外,可用作算术的除法运算。 |
delete | 破坏对象的属性。如果在运算完成后该属性不存在,则结果为true。否则为false。 |
typeof | 用来测量表达式的类型 |
void | 计算表达式,然后放弃其值,返回underfind |