数组
- in 运算符
- for in循环
数组的空位是不影响
length
属性的值,可以读取的,返回undefined
。空位就是数组没有这个元素,所以不会被遍历到,而undefined则表示数组有这个元素,值是undefined,所以遍历不会跳过。
forEach()
方法对数组的每个元素执行一次提供的函数。- “类似数组的对象”(array-like object)
字符串也是类似数组的对象,所以也可以用Array.prototype.forEach.call
遍历。
Array.prototype.forEach.call('abc', function (chr) {
console.log(chr);
});
这种方法比直接使用数组原生的forEach
要慢,所以最好还是先将“类似数组的对象”转为真正的数组,然后再直接调用数组的forEach
方法。
数据类型转换
Number()
parseInt
和Number
函数都会自动过滤一个字符串前导和后缀的空格
parseInt('\t\v\r12.34\n') // 12
Number('\t\v\r12.34\n') // 12.34
- 简单的规则是,Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组。
背后转换规则比较复杂,valueOf
是对象就下一步,valueOf
返回还是对象就下一步,toString
方法最后返回是对象,就报错。
String()
- String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
- String方法背后的转换规则,与Number方法基本相同,只是互换了
valueOf
方法和toString
方法的执行顺序。
错误处理机制
Error实例对象
message:错误提示信息
name:错误名称(非标准属性)
stack:错误的堆栈(非标准属性)
数据类型
typeof运算符
typeof
运算符可以返回一个值的数据类型。- 对象返回
object
typeof window//"object"
typeof {}//"object"
typeof []//"object"
undefined
返回undefined
// 错误的写法
if (v) {
// ...
}
// ReferenceError: v is not defined
// 正确的写法
if (typeof v === "undefined") {
// ...
}
null
返回object
- +