js语句与分号
// 语句无需分号,表达式有时候要加
function foo(){
} // 无需分号
if(1){
} // 无需分号
关于要不要分号
- 早期es3规范建议要加建议,但es6去除了该建议。
- 不加分号的话大多数情况下没问题的,但是有些立即执行函数上面会报错 ```javascript 1 (function(){})();// 报错
// 正确写法 ;(function(){})(); void function(){}(); // 现在前端基本都是打包, // 以前这种自己写模块化的方法报错的情况就很少见了 // es6有原生模块机制
<a name="DqrmZ"></a>
##
<a name="fThGQ"></a>
## js表达式
```javascript
var a = 1,
b = 2;
c = a + b; // 注意空格,不要 a+b;
js错误
大体分成语法错误与其他通用错误
`console.log(11);
我 // 报语法错误,整个程序不会被执行
console.log(22);
console.log(11);
1.a(); // typeerror,这行之前可以运行
script代码块的语法错误
script与script之前相互不影响,第一个script有语法错误也不影响第二个script
运算符
var aNum = 1;
var bNum = 2;
var cNum = (aNum + bNum) * 3;
// 括号运算优先级最大,赋值语句优先级最低。
+号运算符
var c = 1 + 1; //2
var d = 'str' + true; // strtrue
var e = 'str' + NaN; // strNaN
//任意数据类型的值 + 字符串都是字符串
/ 运算符
c = 5/2; // 2.5
c = 0/0; // NaN(Not a number,number类型)
c = "a"/"b"; // NaN
c = 1 / NaN; // NaN
c = 1 / 0; // Infinity
% 取余
2 % 6;// 2
两个值交互
var a = 1,
b = 2;
// 交换1
var c = a;
a = b;
b = a;
// 交换2
a = a + b;
b = a - b;
a = a - b;
自增,自减
// 前加加先运算
var a = 1;
var b = a++; // 1
a; // 2
var a = 1;
var b = ++a; // 2
a; // 2
var a = 4;
var b = --a + a--;
b; // 6
a; // 2
比较运算符
< <= >= == === != !==
1 > "2"; // false 字符串先转为数字
"a" > "b" // false,获取ascii
"1.5" > "11" // true,字符串从左到右比较ascii
==
1 == "1"; // true 比较数据类型,有个转化过程
1 === "1";// false 比较数据类型
NaN == NaN; // false NaN与自己都不相等
逻辑判断
if
var score = 74;
if (score>=90){
}
if (score >= 70 && score < 90){
}else{
}
// 条件互斥的不可以分开写
switch
var age = 18;
switch(age){
case 8:
console.log("8");
break;
case 10:
case 12:
console.log("10, 12");
break;
default:
console.log("not 8 , 10, 12");
break;
}
// switch 有case穿透,注意添加break;
逻辑运算
假的情况
undefined,null,NaN,“”,0,false
|| &&
1 && 2; // 2;
1 || 2; // 1;
// && 遇到真就走,遇到假或者走到最后就返回。
// && 语句只要有一个条件是假的,整体返回假的。
// || 遇到假就往后走,遇到真或者走到最后就返回。
// || 语句只要有一个条件是真的,整体返回真的。
function foo(name){
name = name || "default";
}
foo(undefined);
foo("liquan");
element.onclick = function(e){
var event = e || window.event;
}
!
var a = !!1; // true;
注释
// 单行注释
/*
块注释
*/
function foo(num/* 参数一 */){
}