《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 比较时使用的是全等===操作符,因此不会发生类型转换。

时间: 2024-08-13 04:14:30

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

《JavaScript高级程序设计》学习笔记 基本概念

系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端语言(如Perl)负责的一些输入验证操作,由Netscape主导开发,那时候微软的IE还不能独领风骚.最初叫做LiveScript,当时媒体热炒Java,于是改名为JavaScript.JavaScript和ECMAScript通常指同一门语言,但是,JavaScript是ECMA-262标准的实现和扩展.E

JavaScript高级程序设计(3)基本概念 上

本章内容:语法.数据类型.流控制语句.函数. 1.语法 ECMAScrip的语法和C和其他类C语言(如JAVA和Perl)的语法大同小异. 2.区分大小写 ECMAScript中的一切(变量.函数名和操作符)都区分大小写. 3.标识符 指变量.函数.属性的名字,或者函数的参数.也可以是按照下列格式规则组合起来的一或多个字符: (1) 第一个必须是一个字母.下划线(_)或一个美元符号($): (2) 其他字符可以字母.下划线.美元符号或数字. (3) 扩展的ASCII或Unicode字母字符,但是

JavaScript高级程序设计学习(二)之基本概念

任何语言的核心都必然会描述这门语言基本的工作原理.而描述的内容通常都要涉及这门语 言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念.如前所述, ECMA-262通过叫做 ECMAScript的"伪语言"为我们描述了 JavaScript的所有这些基本概念 本篇文章主要讲语法,类型,操作符,语句和函数. 任何编程,都是从基础的语法开始,例如java,java也有基础语法,操作符,数据类型,控制语句等.c++,php,python也同理. js与java在变量上有其共同

JavaScript高级程序设计(3)基本概念 中

操作符 ECMA-262描述了一组用于操作数据值的操作符,包括算数操作符.位操作符.关系操作符和相等操作符.他们能够适应很多值,例如字符串.数字值.布尔值甚至对象.在应用对象时,相应的操作符都会调用对象的valueof()和toString()方法.取得可以操作的值. 一元操作符:只能操作一个值. 1.递增和递减操作符. 前置性(++i):++位于要操作的变量之前 变量先加1,然后赋值给左边的变量. 后值性(i++):++位于要操作的变量之后 ,先赋给左边的变量,然后再+1. 递减同理: var

JavaScript高级程序设计(3)基本概念

语法:通常使用一或多个关键字来完成给定任务. if语句: 条件可以是任意表达式:而且对这个表达式求值的结果不一定是布尔值.ECMAScript会自动调用Boolean()转换函数将这个表达式的结果转换为一个布尔值.如果求值结果为true,则执行语句1,如果求值结果是false,则执行语句2.这两个语句既可以是一行代码,也可以是一个代码块(一对花括号括起来的多行代码) if(i > 25) { alert("Great than 25."); //单行语句 } else { ale

精读《javascript高级程序设计》笔记一——基本概念

语法 严格模式 启用严格模式,在脚本顶部或函数内部上方添加"use strict";语句. 数据类型 typeof typeof返回undifined,boolean,number,string,object,function六种字符串,typeof null会返回"object". 数据类型包括六种:undefined,null,boolean,number,string,object undefined null 尽管null与undefined比较相等,但用途

《JavaScript 高级程序设计》

因为曾经在高中买来<C Primer Plus>和大学买来的<Clean Code>(挑战自己买的英文版的结果就啃了一点)给我一种经典的书都特别厚的一本就够读大半年的感觉.加上刚上大学图便宜买的有关做网站的旧书(应该是 Table 布局和 Dreamweaver 比较火的时代的书,这些书倒是很薄)让我一度认为做网页不就是 table 然后 tr.td 什么的套呗,高大上点不就是 div+CSS 嘛有什么大不了,给我设计好什么网页不都 ok 能做出来么?这种感觉.然后看网络课程,在网

Javascript高级程序设计——第三章:基本概念

javascript高级程序设计——第三章:基本概念 一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($)开头,注释可以用 // 或者/* */ 严格模式: ECMAScript 5引入了严格模式,在严格模式下不确定的行为将得到处理,通过在顶部添加 “use strict”来启用严格模式: function fuc(){ "use strict&qu

JavaScript高级程序设计学习笔记--基本概念

1.语句 ECMAScript中的语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾,如下例所示: var sum=a+b //即使没有分号也是有效的语句--推荐 var diff=a-b; //有效的语句--推荐 虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它.两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间 推测应该在哪里插入分号了. 2.变量 var message="hi"; 像这样初始化变量

《Javascript高级程序设计》阅读记录(三):第五章 上

这个系列以往文字地址: <Javascript高级程序设计>阅读记录(一):第二.三章 <Javascript高级程序设计>阅读记录(二):第四章 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅读 另一个目的是,Javascript高级程序设计这本书内容很多也很厚,希望其他没有时间的人可以通过看这系列摘录,就可以大体学到书里面的核