JavaScript
【标识符】
【注释】
x = 1; <!-- x = 2;
--> x = 3;
// 只有x=1会执行,其他会被注释掉。
// 为什么x=3也会被注释掉?
function countdown(n) {
while (n --> 0) console.log(n);
// n --> 0会被当做n-- > 0执行。
}
countdown(3)
// 2
// 1
// 0
【字面量】
【变量】
【标签label】
// 跳出双重循环。
top:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) break top;
console.log('i=' + i + ', j=' + j);
}
}
// 跳出代码块。
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
// 进入下一层外层循环。
top:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) continue top;
console.log('i=' + i + ', j=' + j);
}
}
【数据类型】
(1)Number
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
(1 / +0) === (1 / -0) // false
// 如果字符串头部有空格,自动去除空格。
parseInt(' 81') // 81
// 如果参数不是字符串,则会先转为字符串再转换。先转换成十进制,再转换成字符串,再按进制解析。
parseInt(1.23) // 1
// 等同于
parseInt('1.23') // 1
// 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
parseInt('8a') // 8
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15
// 如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
parseInt('abc') // NaN
// 如果字符串以0x或0X开头,parseInt会将其按照十六进制解析。
parseInt('0x10') // 16
//如果字符串以0开头,将其按照10进制解析。
parseInt('011') // 11
// 对于那些会自动转为科学计数法的数字,parseInt会将科学计数法的表示方法视为字符串,因此导致一些奇怪的结果。
parseInt(0.0000008) // 8
// 等同于
parseInt('8e-7') // 8
// parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt的第二个参数为10,即默认是十进制转十进制。
// 如果超出范围,则返回NaN。如果第二个参数是`0`、`undefined`和`null`,则直接忽略。
// 如果字符串包含对于指定进制无意义的字符,则从最高位开始,只返回可以转换的数值。如果最高位无法转换,则直接返回NaN。
parseInt('1546', 2) // 1
parseInt('546', 2) // NaN
// 如果字符串符合科学计数法,则会进行相应的转换。
parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14
// 如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。
parseFloat('3.14more non-digit characters') // 3.14
// parseFloat方法会自动过滤字符串前导的空格。
parseFloat('\t\v\r12.34\n ') // 12.34
// 如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN。
parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN
// isNaN只对数值有效,如果传入其他值,会先被Number函数转成数值,再进行判断。
isNaN('Hello') // true
// 空或非空对象返回true
// 空对象转换为数值为NaN
isNaN({}) // true
// 空数组返回false
// 空数组转换为数值为0
???
isNaN([]) // false
// 只有一个数值成员的数组返回false
isNaN([123]) // false
isNaN(['123']) // false
// 含有非数值成员的数组返回true
isNaN(['xzy']) // true
function myIsNaN(value){
return value !== value;
}
(2)String
(3)Boolean
(4)Undefined
(5)Null
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined
(6)obeject
【强制类型转换】
(1)转换为String
(2)转换为Number
(3)转换为Boolean
【判断数据类型】
(1)typeof
(2)instanceof
(3)Object.prototype.toString
【运算符】
【Date对象】
【Math】
【包装类】
【函数】
(1)函数的声明
(2)函数的属性和方法
(3)变量的作用域
(4)变量、函数提升
(5)参数
// slice
var args = Array.prototype.slice.call(arguments);
var args = [];
for(var i = 0; i < arguments.length; i++){
args.push(arguments[i]);
}
(6)构造函数(类)
function Person(name, age, gender){
this.name = name;
this.age = age;
this.gender = gender;
this.sayHello = function(){
alert(this.name);
};
this.sayHello = fun;
}
function fun(){
alert(this.name);
}
Person.prototype.sayHello = function(){
alert(this.name);
};
var per = new Person('孙悟空', 18, '男');
per.sayHello();
(7)原型prototype
【数组】
(1)数组的基本操作
(2)数组的方法
【正则表达式】
【DOM】
【事件】
(1)事件对象event
(2)事件冒泡Bubble
(3)事件委派
(4)事件传播
【BOM】
【JSON】
【垃圾回收Garbage Collection】
【base64】