javascript语言精粹(笔记)

来源:互联网 发布:walk on water 知乎 编辑:程序博客网 时间:2024/05/16 04:26

附录 A:

1 作用域:
代码块中声明的变量在包含此代码块的函数中的任何位置都是可见的。
我的理解是这样的:
函数中有一个if 判断语句,其中定义了变量i ,在强类型语言中,这个i变量的作用域仅限于 if 代码块,但是在javascript中,在包含if 的 函数中 也可以拿到这个i 变量。
2 Javascripts 有一个自动修复机制,试图通过自动插入分号来修正有缺损的程序。
这个的理解注意点就是 return;

return{    status:true}

这样会返回一个undefined 值。
但是如果 把 { 放在 上面一行,即:

return{    status:true}

就没有问题了。
3 typeof:
typeof null 返回的结果是object ,所以检测null 可以用下面这个:

my_value === null

所以若是检测对象的值,可以这样:

if(my_value && typeof my_value === "object"){    // my_value 是一个 对象或者数组}

4 parseI
将字符串解析成数字,它在遇到非数字时会停止解析。所以

parseInt("16")parseInt("16 statue") 解析结果一致。

5 NaN :
NaN === NaN // 结果返回 false
所以 提供 了 IsNaN() 函数 。
判断一个值是否可用作 数字 可以用以下方法:

var isNumber = function(value){                    return typeof value === "object" && isFinite(value);}

6 伪数组:
typeof 不能区分 数组跟对象, 要判断一个值是否是数组 ,需要检查它的constructor 值

if(my_value && typeof my_value === "object" && my_value.constructor === Array ){    // my_value 是一个数组}

书上 还讲了 说是对于 在不同帧 或 窗口创建的数组 将会给出 false 的结果 ,(这个地方的不懂
所以建议 修改成 下面的检测

if(Object.prototype.toString.apply(my_value) === '[object Array]'){    // my_value 是一个数组}

7 假值:
0 NaN ‘’false null undefined 全部等同于假,但他们又都是 不可互换的。

**

附录B

**
1 ==
=== 和 !== 规则 是 如果 两个运算数类型一致 且拥有 相同的值 那么 === 返回 true
!== 返回 false 。
但是对于 == 和 != 在两个运算数一致 时 还能 做出正确的判断 ,当类型不一致 时 ,会进行 强制 的类型 转换。容易出错。
2 eval
缺点: 性能降低,因为要运行 编译器。也会让JSLint 失效。
Function 构造器 是eval 的另一种形式,也应避免使用。
setTimeout 和setInterval 函数 ,两者 能接受 字符串参数 或者 函数参数 ,当传递的是字符串 参数时 ,两者会像eval 那样 去处理。避免使用。
3 function 语句 跟 function 表达式 的对比 :
这一部分 不懂 ,以后再做笔记。
4 类型 的包装对象:
不要使用 new Boolean , new number, new String 以及 new Object , new Array ,可使用 {} 和 [] 替代。

0 0
原创粉丝点击