《JavaScript高级程序设计》的一些收获-基本概念

  多年以后,面对行刑队,奥雷里亚诺·布恩迪亚上校将会回想起父亲带他去见识冰块的那个遥远的下午。

                                         --《百年孤独》

  在读一本书之前,你永远不知道他对你的影响,一年多前碰到这本书,拜服于作者循序渐进、由浅入深的文笔,

特别是作用域、继承等方面,作为入门两大本之一,不无道理。另外作者写的两本佳作也十分值得一读。《编写可维

护的JavaScript》和《高性能的JavaScript》对于形成良好的JavaScript编码风格有所帮助。接下来把当初看书时

的一些笔记和书摘整理整理,贴上来。

  还有,这当然不是《百年孤独》的读后感。

  

      ------------------------ 正文-----------------------------

 一、严格模式

1     "use strict";// 声明在此则表示 这个js 都为严格模式,放在第一行有效。
2  function a () {
3     "use strict";
4     // 在function内部 声明这个function为严格模式
5 
6 }

1、严格模式下无法再意外创建全局变量

  以下是在chrome 下的输出结果。

  使用后                                                                        

       

  使用前 

      

  疗效显著。

  更多关于声明变量var的使用

2、 在严格模式下, 试图删除不可删除的属性时会抛出异常

 使用后 

var a = 4;
(function () {
    "use strict";
    delete a; //报错,Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
})();

  使用前

var a = 4;
(function () {
    delete a;
    console.log(a); // a=4
})();
a = 4;
(function () {
    delete a;
    console.log(a); // a is undefined ,这时delete才真正起效
})();

  更多关于delete 说明。

3、严格模式要求一个对象内的所有属性名在对象内必须唯一

  正常模式下重名属性是允许的, 重名的最后一个属性决定其属性值. 因为只有最后一个属性有效, 当修改代码要改变属性

值而却不是修改的最后一个重名属性的时候。在严格模式下, 重名属性被认为是语法错误:

"use strict";
var o = { p: 1, p: 2 }; // !!! 语法错误

4、严格模式要求函数的参数名唯一 

5、严格模式给不可写属性赋值、只读属性赋值会报错。(非严格模式下则不会有反馈)

6、严格模式禁用 with

7、使用 arguments.callee 会报错

... ...

 Mozailla 关于严格模式的详细讲解  严格模式

二、五大基本数据类型和Object类型

  Undefined 、Null 、Boolean、Number、和String

1、常见的typeof 判断类型 

typeof undefined //"undefined"
typeof
"ajdf" // "string" typeof new String("ajdf") //"object" typeof null //"object" typeof NaN //"number"

2、undefined 与null的区别

  先看两个比较值

console.log(undefined == null); //true
console.log(undefined === null);//false

  实际上 undefined 值是派生自null值的,ECMA-262规定对他们的相等性测试要返回true

  null表示"没有对象",即该处不应该有值。典型用法是:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

(3)使用某个对象结束后人工置空, 表示不需要此对象。实际回收内存时间由垃圾回收机制决定。

 

  undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

  其他语言只有null,想了解JavaScript 创造者Brendan Eich为毛整了俩,请参阅 undefined 与null的区别 

3、boolean的隐式转换 

  这里只需记住能转换为false的情况。

   String:   ""  --> false

  Number: 0 和NaN  -->false

  Object: null  -->false

  Undefined:  undefined --> false

  条件判断时通常不会显式的转换为boolean值而是利用各类型的隐式转换进行判断。

4、Number类型注意事项

  1. 不要出现 NaN ==  a 的判断,NaN跟任何数都不相等,isNaN(a)方法可以达到想要的效果。任何涉及NaN的操作返回都是NaN,
  2. 使用parseInt() 方法,请尽量使用parseInt(a, 10)的方式指明为10进制。
  3. 涉及要显示页面的数值时,请用toFixed()进行格式化,避免出现 0.1 +0.2 = 0.30000000000000004
  4. 不要用浮点数作为判断根据,因为存在误差。

 

 5、String 类型

  1. ECMAScript 字符串的不可变性。字符串一旦创建,他们的值都是不可变的。
  2. 字符串拼接操作时   
var lang = "Java';
lang = lang + "Script";

  这时首先创建一个新的字符串,在放入Java和script ,最后销毁"Java" 和 "Script"字符串。 

  3.多数情况下,toString() 不必传递参数,但是当是数字时,例如

 var  num = 10 ;
 num.toString(2); // "1010"
 num.toString(16);  // "a"    

   可以利用这个特性实现进制间的转换。 

  6、运算符 

比较字符串时,比较的是”ACSCII“顺序,比如”B” < "a","23"< "3"都是true;

字符与数字比较时, "a"< 3; //false 因为"a” 被转换为NaN了。

如果一个操作数是对象,则调用这个对象的valueOf()方法。如果没有valueOf()方法,则调用toString()方法。

 

== 类型转换时,是向下转换。 

switch 比较时使用的是全等===操作符,因此不会发生类型转换。

 

转载于:https://www.cnblogs.com/LightOfDarkness/p/4700526.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值