博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《JavaScript高级程序设计》的一些收获-基本概念
阅读量:4985 次
发布时间:2019-06-12

本文共 2934 字,大约阅读时间需要 9 分钟。

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

                                         --《百年孤独》

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

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

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

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

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

  

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

 一、严格模式

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

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

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

  使用后                                                                        

       

  使用前 

      

  疗效显著。

  更多

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才真正起效})();

  更多关于 说明。

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); //trueconsole.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为毛整了俩,请参阅 

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

你可能感兴趣的文章
push本地代码到github发生错误的解决办法
查看>>
设置遮罩层
查看>>
Catalyst 3850 升级-1
查看>>
static
查看>>
python模块之time模块
查看>>
bzoj2882: 工艺
查看>>
Shell中的${},##和%%的使用
查看>>
创建一个随机对象列表
查看>>
省市联动 js
查看>>
常用HTTP状态码
查看>>
WebAPI GET和POST请求的几种方式
查看>>
re 模块 常用正则表达式符号 最常用的匹配语法
查看>>
第三小节之Java API
查看>>
python3之迭代器&生成器
查看>>
《此生未完成》读后感
查看>>
Nexus搭建Maven私服
查看>>
访问者模式
查看>>
CentOS 7安装最新版本Git
查看>>
DTW的原理及matlab实现
查看>>
jQuery EasyUI API 中文文档 - 对话框(Dialog)
查看>>