Javascript语言精粹读书笔记3

闭包与内存泄露:JavaScript闭包函数中,内层函数的生命周期会比外层函数长,而如果内层函数拥有访问外层函数中变量的权限,那么这个变量就不会随着外层函数的生命周期结束而销毁。

函数化模式构造constructor:

var constructor=function(spec,my){

    var that;

    var my=my||{};

    that=新对象;

    给that添加特权方法;

    return that;

}

给that添加特权方法时,可以先定义函数:var func=function(){};  然后再赋值给that:that.func=func;

这样做不仅方便了其他方法调用func时可以直接调用,而且如果that.func被篡改或替换,调用func的其他函数是不会有影响的。

*P54 看不懂!!!

如果用函数化的方法创建一个对象,并且该对象的所有方法都不实用this或是that,那么该对象就是持久性的(durable)

一个持久性对象就是一个简单功能函数的几个,不会被入侵,访问它时,除非有方法授权,否则攻击者无法访问对象的内部状态

JavaScript数组:并不是严格意义上的数组,更类似于对象,特性在于以整数作为该对象的属性名。

每一个数组都会有一个length属性,JavaScript数组的length是没有上界的,length属性的值是这个数组的最大整数属性名+1。

它不一定等于数组里的属性的个数

myArray[100000]=true;

myArray.length=100001;

设置更大的length不会给数组分配更多的空间,但设置更小的length会使大于这个length的属性被删除

由于JavaScript的数组其实就是对象,所以delete运算可以用来从数组中移除元素:delete number[2];

但是这样会在数组中留下一个空洞

替代方法:splice();

eval()   setTimeout()   setInterval()   这三个函数具有访问到JavaScript编译器的能力 用时慎重(避免使用字符串参数的形式)

eval()函数传递一个字符串给JavaScript编译器,并且执行其结果。这样很危险

JavaScript的对象永远不会是空对象,因为它们可以从原型链中取得成员属性。

typeof运算符不能识别数组和对象,要进一步识别一个值是否为数组,还需要奸恶它的constructor属性:

if(my_value&& typeof my_value==='object' && my_value.constructor===Array)){};

undefined  是缺失的成员属性的值,判定时用‘null’测试是不好使滴

二进制的浮点数不能正确的处理十进制的小数,因此0.1+0.2不等于0.3. 这是JavaScript种最经常报告的bug。

解决方案:浮点数中的整数运算是精确的,所以小数表现出来的错误可以通过制定精度来避免。

比如乘以100,运算 再除回去blablabla.....

NaN:

NaN是IEEE754中定义的一个特殊的数量值。它表示的不是一个数字,但在JavaScript中时数字类型。

typeof NaN===‘number’    //true

该值可能会在试图把非数字形式的字符串转换为数字时产生。eg:

+’0‘             //0

+'oops'            //NaN

NaN===NaN  //false

NaN!==NaN   //true (对此我表示很无语。。。)


转载于:https://my.oschina.net/u/2618661/blog/626355

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值