基本概念
(本书)推荐使用分号
推荐在控制语句中完全使用代码块
创建全局变量
省略 var 创建一个全局变量
function test() {
message = "hi"
}
test()
alert(message)
数据类型
五种基本数据类型:
Undefined
Null
Boolean
Number
String
可以用 typeof 来获取值类型:
var message = "some string"
alert(typeof message)
alert(typeof(message))
alert(typeof 95)
Undefined
Undefined 只有一种值:undefined ,表示未初始化。
没有声明一个变量而去使用会产生错误,而不是使用 undefined 值。
但是使用 typeof 获取未声明的变量会返回 undefined 。
Null
Null 只有一种值:null ,表示一个空对象指针。
使用 typeof 检测 null 值会返回 "object" 。
实际上 undefined 派生于 null 值,所以 null == undefined 返回 true 。
Boolean
不推荐拿 Boolean 值和数字比较。
可以用 Boolean() 来将其他类型的值转为 Boolean 。
以下值可以转为 true :
非空字符串
非零数值、无穷大
任何对象
以下值可以转为 false :
空字符串(
"")0、NaNnullundefined
在控制语句中,条件语句会自动把值转为 Boolean 。
Number
谨慎浮点数比较,比如:a + b == 0.3 。
最大值为 Number.MAX_VALUE ,最小值为 Number.MIN_VALUE 。如果超出了表示范围,JS 会转为 ±Infinity ,该值不能参与计算。
在 JS 中,产生 NaN 的运算不会报错 。NaN 不等于任何值,包括自身。
可以用 isNaN() 来检测一个值是否是数值,或者是否能转为数值( Boolean 类型可以转为数值)。isNaN() 可以用于对象,他会依次尝试使用对象的 valueOf() 和 toString() 返回值。
可以用 Number()、parseInt()、parseFloat() 将其他类型的值转为数值。
对于 Number() :
如果是 Boolean ,则会转为
1或0。如果是
null,返回0。如果是
undefined,返回NaN。如果是字符串,
八进制前缀可能会不被判定 。
空字符串转为
0。无法转换则为
NaN。
parseInt() 会从第一个非空字符进行识别,如果第一个字符不代表数值,则返回 NaN 。比如 parseInt("1234blue") 会转为 1234 。
parseInt() 会识别所有进制前缀,而 parseFloat() 会忽略所有前导零。
明确进制转换:parseInt(value, radix) 。
String
使用 length 属性获得字符串长度 。
几乎每个值都有 toString() 方法,同时,可以明确进制:toString(radix) 。
String() 函数能将所有类型转为字符串,包括 null 和 undefined 。
赋值
需要注意的是,在赋值语句也有返回值,返回的是值:
var i = 0
alert(i = 5) // 5
减法
Infinity - Infinity 等于 NaN,-Infinity 也一样。
Infinity - (-Infinity) 等于 Infinity 。
全等和不全等
使用 == 符号,JS 会先尝试能否将一个值转为另一个值的类型:
var result = ("55" == 55) // true
使用 === 符号,两个值要求完全相等,比如:
null == undefined // true
null === undefined // false
!== 为不全等符号 。
for 语句
在循环内部定义的变量也可以在外部访问到,因为 JS 不存在块级作用域。
for-in 语句
因为 js 中对象的属性没有顺序,所以 for-in 迭代的顺序是不可预测的,且受不同浏览器影响。
使用 for-in 要确保迭代对象不为 null 或者 undefined 。
label 语句
JS 支持 label 语句,可以在明确的循环位置进行 break 或者 continue :
loop1:
for (var i = 0; i < 10; i += 1) {
for (var j = 0; j < 5; j += 1) {
if (...) {
break loop1
}
...
}
}
switch 语句
在 switch 中使用的是全等操作符(===),而不是相等(==)。
函数无返回值
无指定返回值的函数会返回 undefined
函数参数
JS 的函数的所有参数被封装在 arguments 数组中。函数的参数声明是为了提供使用便利 。
对于任何函数,在实参中,参数个数和参数类型都是随意的。
arguments 数组元素的值和参数的值是完全一致且同步的。如果 arguments 无法分配到所有参数,未分配的参数会被定义为 undefiend 。
函数重载
JS 没有函数重载,如果同函数被定义多次,后定义的函数会覆盖先定义的函数。