操作符
1、一元操作符:递增/递减(++ or --),注意区分前缀和后缀的区别,可做用于任何,不限整数
- 对于字符串,如果是有效的数值形式,则转换为数值再应用改变。变量类型从字符串变成数值。
- 对于字符串,如果不是有效的数值形式,则将变量的值设置为
NaN
。变量类型从字符串变成数值。- 对于布尔值,如果是
false
,则转换为0再应用改变。变量类型从布尔值变成数值。- 对于布尔值,如果是
true
,则转换为1再应用改变。变量类型从布尔值变成数值。- 对于浮点值,加1或减1。
- 如果是对象,则调用其(第5章会详细介绍的)
valueOf()
方法取得可以操作的值。对得到的值应用上述规则。如果是NaN
,则调用toString()
并再次应用其他规则。变量类型从对象变成数值
2、一元加减:+一元加没有任何影响,-一元减主要用于放在数值前,使得数值变成负数
3、位操作符:按位非(~),按位与(&),按位或(|),按位异或(^),左移(<<),有符号右移(>>),无符号右移(>>)
4、逻辑非:!,两个!!可以将任意值转换为布尔值
5、逻辑与:&&,可用于任何类型的操作数,不限布尔值
- 如果第一个操作数是对象,则返回第二个操作数。
- 如果第二个操作数是对象,则只有第一个操作数求值为
true
才会返回该对象。- 如果两个操作数都是对象,则返回第二个操作数。
- 如果有一个操作数是
null
,则返回null
。- 如果有一个操作数是
NaN
,则返回NaN
。- 如果有一个操作数是
undefined
,则返回undefined
逻辑与是短路操作符,第一个值就决定了计算的结果,那不会进行第二个值的计算。例如false&&true=false
let variel=true;
let o = variel && s1;//报错,s1未定义
console.log(o);
variel=false;
let o2=variel&& s1;//不报错,短路操作符
console.log(o2);
6、逻辑或:||,可做用于任何值类型,不限于布尔值,但非布尔类型的值不一定会返回布尔值
- 如果第一个操作数是对象,则返回第一个操作数。
- 如果第一个操作数求值为
false
,则返回第二个操作数。- 如果两个操作数都是对象,则返回第一个操作数。
- 如果两个操作数都是
null
,则返回null
。- 如果两个操作数都是
NaN
,则返回NaN
。- 如果两个操作数都是
undefined
,则返回undefined
同逻辑与操作符类似,逻辑或操作符也具有短路特性。只不过逻辑或的第一个值如果为true那么,无论如何,第二个值都不会被计算,直接返回true
7、乘性操作符:*
- 如果操作数都是数值,则执行常规的乘法运算,即两个正值相乘是正值,两个负值相乘也是正值,正负符号不同的值相乘得到负值。如果ECMAScript不能表示乘积,则返回
Infinity
或-Infinity
。- 如果有任一操作数是
NaN
,则返回NaN
。- 如果是
Infinity
乘以0,则返回NaN
。- 如果是
Infinity
乘以非0的有限数值,则根据第二个操作数的符号返回Infinity
或-Infinity
。- 如果是
Infinity
乘以Infinity
,则返回Infinity
。- 如果有不是数值的操作数,则先在后台用
Number()
将其转换为数值,然后再应用上述规则
8、除法操作符:/
- 如果操作数都是数值,则执行常规的除法运算,即两个正值相除是正值,两个负值相除也是正值,符号不同的值相除得到负值。如果ECMAScript不能表示商,则返回
Infinity
或-Infinity
。- 如果有任一操作数是
NaN
,则返回NaN
。- 如果是
Infinity
除以Infinity
,则返回NaN
。- 如果是0除以0,则返回
NaN
。- 如果是非0的有限值除以0,则根据第一个操作数的符号返回
Infinity
或-Infinity
。- 如果是
Infinity
除以任何数值,则根据第二个操作数的符号返回Infinity
或-Infinity
。- 如果有不是数值的操作数,则先在后台用
Number()
函数将其转换为数值,然后再应用上述规则。
9、取模操作符:%
- 如果操作数是数值,则执行常规除法运算,返回余数。
- 如果被除数是无限值,除数是有限值,则返回
NaN
。- 如果被除数是有限值,除数是0,则返回
NaN
。- 如果是
Infinity
除以Infinity
,则返回NaN
。- 如果被除数是有限值,除数是无限值,则返回被除数。
- 如果被除数是0,除数不是0,则返回0。
- 如果有不是数值的操作数,则先在后台用
Number()
函数将其转换为数值,然后再应用上述规则
10、指数操作符Math.Pow(数值,指数)
11、加性操作符:+,数值相加,或者是将两个字符串拼接在一起
12、减性操作符:-,数值相减、
13、关系操作符:>,<,<=,>=,其中字母是按照ASCII码来进行比较的
14、相等操作符:
等于和不等于:==和!=
表达式 | 结果 |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
全等和不全等:===和!==
let result1 = ("55" != 55); // false,转换后相等
let result2 = ("55" !== 55); // true,不相等,因为数据类型不同
15、条件操作符:?:
16、赋值操作符:=
- 乘后赋值(
*=
)- 除后赋值(
/=
)- 取模后赋值(
%=
)- 加后赋值(
+=
)- 减后赋值(
-=
)- 左移后赋值(
<<=
)- 右移后赋值(
>>=
)- 无符号右移后赋值(
>>>=
)这些操作符仅仅是简写语法,使用它们不会提升性能。
17、逗号操作符:,
let num1 = 1, num2 = 2, num3 = 3;
二、语句
1、if语句
2、do-while语句
3、for语句
4、while语句
5、for-in语句:是一种严格的迭代语句,用于枚举对象中的费符号键属性
for (const propName in window) {
document.write(propName);
}
6、for-of语句:是一种严格的迭代语句,用于遍历可迭代对象的元素
7、标签语句:后面可以通过break或者是continue语句引用
//语法
label: statement
start: for (let i = 0; i < count; i++) {
console.log(i);
}
8、break和continue语句
9、with语句:严格模式不允许使用with语句
//语法
with (expression) statement;
let qs = location.search.substring(1);
let hostName = location.hostname;
let url = location.href;
with(location) {
let qs = search.substring(1);
let hostName = hostname;
let url = href;
}
10、switch语句
三、函数:不要求指定函数的返回值,不指定返回值的函数会返回undefined
function functionName(arg0, arg1,...,argN) {
statements
}