首页 > 代码库 > 【读书笔记】悟透javascript

【读书笔记】悟透javascript

编程世界中只有数据和代码两种基本元素。

javascript中的元素是很简洁的,简单数据只有

  • undefined, typeof(undefined)返回undefined,可以将undefined赋值给任何变量或者属性,但并不意味着清除了该变量,反而会因此多了一个属性。
  • null,typeof(null)返回oobject,但null并非object,具有null值得变量也并非object
  • boolean,
  • Number,线性的事物,大小和次序分明。typeof(NaN)和typeof(infinity)都返回number。NaN参与任何数值计算的结构都是NaN,而且NaN != NaN。 infinity/infinity = NaN
  • string,面向人类的理解事物。

复杂数据只有object一种,object就是对象的类型,javascript却没有类的概念,所有简单类型都不是对象,javascript没有将对象化的能力赋予这些类型,所有对象化的能力,就是可以将数据和代码组织成复杂结构的能力,javascript中只有object类型和function类型提供了对象化能力

javascript中的代码只体现为一种,即function。function就是函数的类型,事实上,我们写的这些javascript函数不过是一个命了名的变量而已,其变量类型即为function,变量的值就是我们编写的函数代码体

javascript引擎是一段一段的分析执行程序,在同一段程序的分析执行中,定义式的函数语句就会被提取出来优先执行,函数定义执行完之后,才会按顺序执行其他语句代码,这一特征被称为javascript的预编译,实际上javascript执行引擎的预编译还包括对var变量的创建

可以用typeof返回javascript元素的类型

任何程序都会在一个原始的环境中运行,这个原始的环境就是全局环境,全局环境包括了一些预定义的元素,javascript中的全局环境就是window对象(非浏览器宿主环境中可能不叫window,对全局的javascript语句来说,window对象就相当于当前的作用域,用var定义的变量只在本作用域有效,尽管此时上层作用域有同名的东西,都与本作用域的“var”变量无关,退出词作用域之后,var消失。(函数调用时形成作用域链)。javascript在查找标识符时 ,除非指明特定对象,否则会沿着作用域链寻找符合这一标识符的变量或者属性,甚至会自动创建该标识符。

javascript提供的调用上下文信息有几个:

一个是函数本身,当代码运行在函数体内的作用域时空时,函数本身的标识符是可以的

一个是函数的caller属性,其表示调用当前函数的上层函数,这就提供了一个可以追踪函数调用来源的线索。灵活运用函数自身标识和caller属性,可以帮我们简化代码或写一些通用的处理代码,许多优秀的Ajax框架都利用这些特性

另外还有this关键字,this关键字表示函数正在服务的“这个”对象,并不一定是函数本身所属的对象,this只是任意对象和function元素结合时的一个概念

用javascript编写网页脚本时,经常会用到一个self的属性,这里的self只是表示网页结构的当前window对象,以及FRAME或IFAEM元素的window对象

arguments隐含对象,从表面上看表示调用当前函数的参数们,除了我们可以直接使用函数定义列表中的那些标识符来访问之外,还可以用arguments对象按数组方式来访问参数,尽管arguments对象并非一个真正的数组

用eval()函数动态执行的代码并不创建新的作用域,其代码就是在当前作用域执行的,eval()中的动态代码可以访问到当前作用域的this,arguments等对象,因此可以使用eval()实现一些高级的多态和动态扩展方面的应用

javascript里的函数和对象既有对象的特征也有数组的特征,这里的数组被称为字典,一种可以任意伸缩的名称值对,其实object和function的内部实现就是一个字典结构。

怎样建立对象?Javascript Object Notation,javascript对象表示法,json为创建对象提供了非常简单的方法,对象可以作为一个json形式的字符串在网络间自由传递和交换信息,而当需要将这个json字符串变成一个javascript对象时,只需要使用eval函数这个强大的数码转换引擎,就立即能得到一个javascript内存对象

【读书笔记】悟透javascript