1.1
2
3
4
5
6
7
8
9
10
11
12
13A.if('21'<'15'){alert(1)}
B.if(15-15){alert(1)}
C.if('21'<15){alert(1)}
D.if('5'+0){alert(1)}
哪项会弹1? B
if (表达式-条件) {
// 条件为真执行的代码
}
A.字符串之间的比较,是按照从左到右的顺序,逐位进行比较,按照unicode码的大小
charCodeAt(index)
用于获取指定索引值位置的unicode
1
2
3
4
5var a = '21', b = '15';
console.log(a.charCodeAt(0)); // 50
console.log(b.charCodeAt(0)); // 49
50 < 49 => false;
// 注:当前位大小相同时会继续比较下一位
B.减法运算 15-15=0 => false
C.隐式类型转换
‘21’ => 21 字符串转为数字
21 < 15 => false
D.’5’+0 => ‘50’ => true
+作用:
加法运算:左右两侧都是数字
字符串拼接:左右两侧只要有一侧是字符串,那么就是字符串拼接
正号
2.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18var i = 0, j = 0;
for (; i < 10,j<6; i++,j++) {
k = i + j;
}
console.log(k);
// 10
for (; i < 6,j<10; i++,j++) {
k = i + j;
}
console.log(k);
// 18
/*
for (变量初始化; 执行条件; 改变变量) {}
*/
注意:判断条件,运算符而不是&&,只返回,最后的一个,判断条件前面的i<10会被忽略
变量不定义直接赋值会默认为全局变量
3.1
2
3
4
5
6
7
8
9
10
11fn1();
var fn1 = function(a){alert(a);}
// fn1 is not a function
/*
变量预解析
var fn1; // undefined
fn1(); // 只有函数才能调用,此时fn1还没被赋值
fn1 = function(a){alert(a);}
*/
4.1
2
3
4
5var x = 1;
function fn(n){n = n + 1;}
y = fn(x);
// undefined
注意:函数fn没有返回值,必须return才能接收返回值
5.1
2
3
4
5
6
7
8
9
10
11
12
13
14function fn1(){
var a = 0;
function fn2(){
++a;
alert(a);
}
return fn2;
}
fn1()(); // 1
var newFn = fn1();
newFn(); // 1
newFn(); // 2 这里并没有重新创建a变量
// 1,1,2
作用域链:一层层向上查找
垃圾回收:把用不到的变量等进行回收1
2
3
4
5
6
7function fn(){
var a = 1;
a = a + 1;
console.log(a);
}
fn();
fn();
6.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23for(var i = 0; i < 5; i++){
setTimeout(function(){
console.log(i);
}, i * 1000);
}
// 55555
for(var i = 0; i < 5; i++){
setTimeout(function(i){
console.log(i);
}(i), i * 1000);
}
// 0 1 2 3 4
for(let i = 0; i < 5; i++){
setTimeout(function(){
console.log(i);
}, i * 1000);
}
// 0 1 2 3 4
7.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16(!+[]+[]+!+[]).length // 8
=> (!(+[])+[]+!(+[])).length
=> (!0+[]+!0).length
=> (true+[]+true).length
=> (true+''+true).length
=> ('true'+true).length
=> ('truetrue').length
/*
! 取反
+号:
1.加法运算
2.字符串拼接
3.正号
隐式类型转换
+[] => '' => 0 // 空数组先调用toString转字符串再调用toNumber转数字进行计算
*/
优先级 | 运算符 | 结合性 |
---|---|---|
1 | () [] |
从左向右 |
2 | ! + (正) - (负) ~ ++ -- |
从右向左 |
3 | * / % |
从左向右 |
4 | + (加) - (减) |
从左向右 |
5 | << >> >>> |
从左向右 |
6 | < <= > >= instanceof |
从左向右 |
7 | == != |
从左向右 |
8 | & (按位与) |
从左向右 |
9 | ^ |
从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?: | 从右向左 |
14 | = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= |
从右向左 |
8.1
console.log(100['toString']['length']) // 1
length 表示的是toString调用时候的参数长度1
2
3
4function fn1(){}
function fn2(x,y){}
console.dir(fn1);
console.dir(fn2);
toString(进制) 接收的参数是进制1
2var a = 4;
console.log(a.toString(2)); // 100
9.1
2
3
4
5
6
7
8
9可以判断数组中是否有大于10的值 arr.some()
arr.every()
// 循环数组中的每一项,执行一个指定的函数,返回true
arr.push()
// 向数组的末尾添加一个或多个元素,并返回新的长度
arr.some()
// 循环数组中的每一项,执行一个指定的函数,只要其中有一个符合条件,返回true
arr.splice()
// 向/从数组中添加/删除项目,然后返回被删除的项目
10.1
2
3
4
5
6
7
8
9
10
11
12var arr = [1,2];
var arr2 = arr.concat();
arr2.push( arr.splice()1,0 );
// 第一个参数,开始的index
// 第二个参数,删除的个数
// 返回删除的
// [1,2,[]]
arr; // [1,2]
arr2; // [1,2,[]]
// arr.concat() 用于合并函数,返回的函数是新的函数,不会影响在合并过程中用到的函数
null = undefined; // true
null == 0; // false
null == [] // false
null == null // true
null == undefined == null // false 运算符优先级相同,从左到右计算 null == undefined == null => true == null => false
null >= 0 // true
null <= 0 // true
http://www.ecma-international.org/
http://www.fengfly.com/document/ECMAScript5.1/