Javascript权威指南精髓(一)

  1. 绑定事件的方式:IE8及以下,attachEvent,其他addEventListener
  2. javascript中函数都是真值
  3. 如果程序在期望使用字符串的地方使用了数字,则数字会自动转换为字符串
  4. 通过x!=x可以判断一个数是不是NaN
  5. substring和slice的区别在于两者对待负数时不同,前者当成0,后者转换成倒数
  6. 字符串既然不是对象,为什么会有属性呢?只要引用了字符串的属性,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁(其实在实现上不一定创建或销毁临时对象,然而整个过程看起来是这样)。数字和布尔值也具有各自的方法,实现的原理类似,null和undefined没有包装对象:访问他们的属性会造成一个类型错误。
  7. javascript中对象转换到字符串的转换经过了如下这些步骤

1)  如果对象有toString()方法,则调用这个方法。如果它返回一个原始值, Javascript将这个值转换为字符串(如果本身不是字符串的话),并返回这个字符串结果。

2)  如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么javascript会调用valueOf()方法。如果存在这个方法,则JavaScript会调用它。如果返回是原始值,javascript将这个值转换为字符串(如果本身不是字符串的话),并返回这个结果

3)  否则,javascript无法从toString()或valueOf()获得一个原始值,因此这是它将抛出一个类型异常。

8.对象转换到字符串的过程中,javascript做了同样的事情,只是它会首先尝试使用valueOf()方法:

1)  如果对象有valueOf()方法,后者返回一个原始值,则Javascript将这个原始值转换为数字(如果需要的话)并返回这个数字

2)  否则,如果对象具有toString()方法,后者返回一个原始值,则Javascript将其转换并返回

3)  否则,Javascript抛出一个错误异常

9.对象转换为数字的细节解释了为什么空数组会被转换为数字0以及为什么具有单个元素的数组同样会转换成一个数字。数组继承了默认的valueOf()方法,这个方法返回一个对象而不是一个原始值,因此,数组到数字的转换则调用toString()方法。空数组转换成为空字符串,空字符串转换成为数字0.含有一个元素的数组转换为字符串的结果和这个元素转换字符串的结果一样。如果数组只含有一个数字元素,这个数字住哪环卫空字符串,再转换为数字。

10.Javascript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。有意思的是,这意味着在声明之前已经可用。Javascript的这个特性被非正式地称为声明提前,即Javascript函数里声明的所有变量(但不涉及赋值)都被“提前”至函数体顶部。

11.当声明一个Javascript全局变量时,实际上是定义了全局对象(window)的一个属性。当使用var声明一个变量时,创建的这个属性是不可配置的,也就是说这个变量无法通过delete运算符删除。可能你已经注意到了,如果你没有使用严格模式并给一个未声明的变量赋值的话,Javascript会自动创建一个全局变量。以这种方式创建的变量时全局对象的可配置属性,并且可以删除它。

12.当定义一个函数时,它实际上保存一个作用域链。当调用这个函数时,它创建一个新的对象用来存储它的局部变量,并将这个对象添加至保存的那个作用域上,同时创建一个新的对象来存储它的局部变量,并将这个对象添加至保存的那个作用域链上,同时创建一个新的更长的表示函数调用作用域的“链”。

13.当计算一个对象创建表达式的值时,和对象初始化表达式通过{}创建对象的做法一样。Javascript首先创建一个新的空对象,然后,Javascript通过传入指定的参数并将这个新对象当做this的值来调用一个指定的函数。这个函数使用this来初始化这个新创建对象的属性。那些被当成构造函数的函数不会返回一个值,并且这个新创建并被初始化后的对象就是整个对象创建表达式的值。如果一个构造函数确实返回了一个对象值,那么这个对象就作为整个对象创建表达式的值,而新创建的对象就被废除了。

左值:指表达式只能出现在赋值运算符的左侧。

14.eval()具有改变全局变量能力,当通过别名调用时,eval()会将其字符串当成顶层的全局代码来执行。执行的代码可能会定义新的全局变量和全局函数,或者全局变量赋值,但却不能使用或修改主调函数中的局部变量,因此,这不会影响到函数内的代码优化。实例代码如下:

IE9之前的早期版本IE和其他浏览器有所不同,当通过别名调用eval()时并不是全局eval()(它也会抛出一个EvalError异常,仅仅将其当做局部eval来调用)。但IE的确定义了一个名叫evalScript()的全局函数来完成全局eval的功能(但和eval()稍有不同,execScript()总是会返回null。

15.Javascript:void(0),指定要计算一个表达式但是不返回值,a href=#与 a                href=javascript:void(0) 的区别

#包含一个位置信息

默认的锚是#top也就是网页的上端

而=javascript:void(0)仅仅表示一个死链接

16.函数声明语句通常出现在Javascript代码的最顶层,也可以嵌套在其他函数体内,但在嵌套时,函数声明只能出现在所嵌套函数的顶部。也就是说,函数定义不能出现在if语句,while循环或其他任何语句中,正是由于函数声明位置的这种限制,ECMAScript标准规范并没有将函数声明归类为真正的语句。有一些Javascript实现的确允许在出现语句的地方都可以进行函数声明,但是不同的实现在细节处理方式上有很大的差别,因此将函数声明放在其他语句内的做法并不具备可移植性。

尽管函数声明语句和函数定义表达式包含相同的函数名,但二者仍然不同。两种方式都创建了新的函数对象,但函数声明语句中的函数名师一个变量名,变量指向函数对象。和通过var声明变量一样,函数定义语句中的函数被显式地“提前”到了脚本或函数的顶部。因此它们在整个脚本和函数内都是可见的。使用var的话,只有变量声明提前了——变量的初始化代码仍然在原来的位置。然而使用函数声明语句的话,函数名称和函数体均提前:脚本中的所有函数和函数中的所有嵌套的函数都会在当前上下文中其他代码之前声明。也就是说,可以再声明一个Javascript函数之前调用它。

和var语句一样,函数声明语句创建的变量也是无法删除的。但是这些变量不是只读的,变量值可以重写。

17.switch中对每个case的匹配操作实际上市“===”恒等运算比较,而不是“==”,因此,表达式和case的匹配并不会做任何类型的转换

时间: 2024-08-07 02:05:46

Javascript权威指南精髓(一)的相关文章

Javascript权威指南精髓(二)

在ECMAScript5中,对象直接量中的最后一个属性后的逗号将忽略,且在ECMAScript3的大部分实现中也可以忽略这个逗号,但在IE中则报错. delete运算只是断开属性和宿主对象的联系,而不会去操作属性中的属性.delete操作只能删除自有的属性,不能删除继承的属性(要删除继承的属性必须从定义这个属性的原型对象上删除它,而且这会影响到所有继承自这个原型的对象) hasOwnProperty()放大用来检测给定的名字是否是对象的自有属性.对于继承属性它返回false json:全称为Ja

JavaScript权威指南第13章 web浏览器中的javascript

13.1 客户端javascript window对象是所有的客户端javascript特性和api的主要接入点.表示浏览器的一个窗口,可以通过window对象来引用它. window 的方法 alert() prompt() confirm() 13.2 在html里嵌入javascript 4种方法: 内联:放置在<script></script>标签之中 外部引入:<script src="   "></script> html程序

《Javascript权威指南》学习笔记之十一:处理字符串---String类和正则表达式

一.正则表达式的基本语法 1.概念:正则表达式由普通字符和特殊字符(元字符)组成的文本模式,该模式描述在查找字符串主体时待匹配的一个或者多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 普通字符包括所有的大小写字母字符.所有数字.所有标点符号及一些特殊符号.普通字符本身可以组成一个正则表达式,也可以和元字符组合组成一个正则表达式:而元字符则具有特殊的含义,包括().[].{}./.^.$.*.+.?...|.-.?:.?=.?! 2.基本语法 3.优先权含义 二.使用

JavaScript权威指南 - 函数

函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象.JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等. JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量.这也就是所谓的"闭包&qu

《javascript权威指南》读书笔记——第二篇

<javascript权威指南>读书笔记--第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字符集 JavaScript程序是用Unicode字符集编写. Unicode是ASCII和Latin-1的超集,支持几乎所有语言. ES3 要求支持Unicode 2.1及后续版本 ES5 要求支持Unicode 3及后续版本 2.1.1 区分大小写 JavaScript是区分大小写的. HTML 并不区分大

javascript权威指南(中文版)中的一些错误

本人目前正在学习js,使用的是javascript权威指南(中文版),学习的时候发现一些细节上的错误,若是我的错误,欢迎指正 1.P11------多了“我们称为 原文为 return Math.sqrt(a * a + 我们称为b * b); 2.P16------canvas错写为vanvas 原文为 第21章涵盖基于HTML的<vanvas>标签的客户端API,用来进行任意形状图形的绘制. 3.P38------“5代表星期五”错写为“5代表星期一” 原文为 later.getDay()

你是怎么看完《JavaScript权威指南》《JavaScript高级程序设计》等这类厚书的?

如果js属于刚刚入门阶段,不建议抱着书一直看下去,因为这样你不容易明白这些定义和概念的用法.看着看着就会很迷惑的.建议先试着用原生JS写一些小项目和小程序,然后试着写博客做些笔记,把遇到的困惑写下来,带着疑问去学习. 如果有一定的js基础或者用JQuery等一些库做过一些小东西的话,可以先看<JavaScript语言精粹(修订版)>这本书,这本书很薄,100多页而已,可以很快看完,对于了解js的基础知识,比如对象,数组,语法,作用域,闭包等等都很有帮助.前面有人提到<你不知道的JavaS

阅读:《javascript权威指南》(笔记)

判断是否为NaN类型:x!=x //true 当且仅当x为NaN时,x才不等于自身. isNaN()//ture 参数为NaN或则非数字值,则返回true.false可判是否为断数字和字符串数字(如:"3"): js数字精度值极其接近0.1,如:0.411 - 0.401,期待结果0.01,实际结果结果为0.009999999999999953:通过"\"符号连接字符串,拼接html字符串更简洁,更高效: parseInt和parseFloat参数若为字符串,则该字

《javascript权威指南》读书笔记——第一篇

<javascript权威指南>读书笔记--第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本书来补充下. 今天是今年的196天,由于我之前承诺过,每天分享读书笔记,只是之前分享的是大众读物,所以随手分享到kindle阅读群里了.但是现在读的是技术类书籍,分享到kindle读书群不太合适,所以还是以博客的形式分享.这样子,一个链接,大家感兴趣了就点开看看,不感兴趣了,就不点开. 其实这篇文章应该是昨天