一直都有在页面用javascript作为脚本语言,但未从未深入了解,每当需要用到什么功能的时候再查找相关事例,最近看了js框架感觉之前的了解明显不够。
一、原始值和对象
javascript中的原始值(undefined,null,数字、字符串和布尔值)和对象(包括数组和函数)有着根本的区别。原始值不可更改:任何方法都无法改变一个原始值。原始值的比较是值的比较。对象的属性值可以改变,且对象的比较不是属性值的比较。对象的比较是引用的比较,当且仅当它们引用的是同一个对象时比较才相等(对象可称为引用类型)。
数值、字符串和布尔值原始值有对应的包装对象,当对原始值调用属性时会自动调用其包装对象准换为临时对象,并被用来处理属性的引用。一旦属性引用结束则销毁临时对象。而null和undefined无对应的包装对象,故不能引用其属性。
如:var test='test' //创建一个字符串
test.len=10; //设置对象属性,会创建一个临时字符串对象并设置属性随即销毁
var t= test.len // 创建一个新的临时字符串对象,尝试读取len属性但不存在返回undefined
二、类型转换
javascript中的取值非常灵活,将根据需要自动进行类型转换。
"=="等于运算在判断值相当时会自动转换成同类型再比较。
"==="恒等运算在判断相等时不做类型转换
注意一个值转换为另一个值并不意味着两个值相等,比如在期望布尔值的时候undefined会被转换为false。但并不表明undefined==false。"=="运算符从不试图将操作数转换为布尔值。但是1==true 和0==false 都为真。变量如果不为-0,+0,null,undefined,false,都会被处理为true。new Boolean(false)是一个对象会转换为ture。
+和==应用的是对象到原始值的转换。
日期类型是javascript中唯一预先定义的类型,定义了有意义的向字符串和数值类型的转换。对于所有非日期类型对象向原始值的转换,基本上是对象到数值的转换(首先调用valueOf())
三、作用域
javascript使用了函数作用域:变量在声明它们的函数体及这个函数体嵌套的任意函数体内都是有定义的。且函数里声明的所有变量(不涉及赋值)都被提前至函数体的顶部,即声明提前,在代码运行之前的预编译进行。函数体内的局部变量会覆盖同名的全局变量。
除函数作用域外的变量均为全局变量。当声明一个全局变量时,实际上是定义了全局对象的一个属性。当使用var声明一个变量时,创建的这个属性是不可配置的,也就是这个变量无法通过delete运算符删除。如果没有使用严格模式并给一个未声明的变量赋值的话,会自动创建一个全局变量,以这种方式创建的变量是全局对象的正常的可配置属性并可删除。[测试都可删除]
一般来说以下几种情形拥有全局作用域:
1)最外层函数和在最外层函数外面定义的变量拥有全局作用域
2)所有末定义直接赋值的变量自动声明为拥有全局作用域
3)所有全局对象(如:window对象)的属性拥有全局作用域
四、作用域链
在JavaScript中,函数也是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。
执行函数时会创建一个称为“运行期上下文(execution context)”的内部对象,运行期上下文定义了函数执行时的环境。每个运行期上下文都有自己的作用域链,用于标识符解析,当运行期上下文被创建时,而它的作用域链初始化为当前运行函数的[[Scope]]所包含的对象。
什么是执行环境呢?在javascript里面执行环境分为两类,一类是全局环境,一类是局部环境,整个页面里被共享的方法和属性就是在全局环境,相对于全局环境,函数{}号里的执行环境就是局部环境,执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为,每个执行环境都定义了一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象里,虽然我们自己编写的代码无法访问这个对象,但解析器在处理数据时候后台会使用到它。
全局执行环境另一种说法是最外围的一个执行环境,在web浏览器的范围中(actionscript也是施行了ECMAScript标准,它的全局范围就和javascript的全局范围不同),全局执行环境被认为是window对象,因此全局变量和函数都是作为window对象的方法和属性来创建的,全局执行环境知道应用程序退出比如关闭网页或浏览器才会被销毁。而局部环境则是以函数对象作为关联对象。
每个执行环境都有一个与之关联的变量对象(variable object, VO),执行环境中定义的所有变量和函数都会保存在这个对象中,解析器在处理数据的时候就会访问这个内部对象。
全局执行环境是最外层的一个执行环境,在web浏览器中全局执行环境是window对象,因此所有全局变量和函数都是作为window对象的属性和放大创建的。每个函数都有自己的执行环境,当执行流进入一个函数的时候,函数的环境会被推入一个函数栈中,而在函数执行完毕后执行环境出栈并被销毁,保存在其中的所有变量和函数定义随之销毁,控制权返回到之前的执行环境中,全局的执行环境在应用程序退出(浏览器关闭)才会被销毁。
当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain,不简称sc)来保证对执行环境有权访问的变量和函数的有序访问。作用域第一个对象始终是当前执行代码所在环境的变量对象(VO)
function a(x,y){
var b=x+y;
return b;
}
在函数a创建的时候它的作用域链填入全局对象,全局对象中有所有全局变量
尽量使用局部变量,就带来一个十分重要的提高程序性能的用法:我们在函数内部使用全局变量可以说是一种跨作用域操作,如果某个跨作用域的值在函数的内部被使用到一次以上,那么我们就把它存储到局部变量里。
五、原型
每一个对象都关联一个原型对象并继承其属性(null除外),没有原型的对象不多,Object.prototype就是其中之一。通过对象直接量创建的对象都具有同一个原型对象,并可通过Object.prototype获得对原型对象的引用。
分享到:
相关推荐
这份"JavaScript学习指南"高清PDF,无疑为想要深入理解JavaScript的初学者或有一定基础的开发者提供了宝贵的资源。下面,我们将深入探讨JavaScript的一些关键知识点。 1. **基础语法**:JavaScript的基础包括变量、...
JavaScript学习(一) JavaScript是一种广泛应用于网页和网络应用的脚本语言,由 Netscape 的 Brendan Eich 在1995年发明。它主要用于客户端的网页交互,赋予网页动态功能,如响应用户操作、处理数据、与服务器通信...
这份"非常全面的JavaScript学习资料"压缩包,包含了11个深入学习JavaScript的文件,旨在为学习者提供一个详尽且丰富的学习路径。 1. **基础概念**:JavaScript的基础包括变量、数据类型(如字符串、数字、布尔值、...
JavaScript学习指南 JavaScript,一种广泛应用于网页和网络应用的脚本语言,是互联网上最流行的编程语言之一。它主要用于客户端的交互式网页开发,也可以在服务器端通过Node.js平台进行后端开发。JavaScript与Java...
本书“JavaScript学习指南”旨在帮助初学者和有经验的开发者深入理解和掌握JavaScript的核心概念和技术。 首先,JavaScript在网页中的主要作用是处理用户交互、操作DOM(文档对象模型)、进行AJAX(异步JavaScript...
本“JavaScript学习指南”源代码包含了深入理解并掌握JavaScript编程的关键知识点。 一、基础语法 JavaScript的基础语法包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、...
本资源包"JavaScript学习资料全面整理"显然是为了帮助初学者和进阶者深入理解这门语言,包含了各种资源,下面将对JavaScript的一些关键知识点进行详细阐述。 1. **基础概念**:JavaScript是一种解释型、弱类型、...
这份"JavaScript学习PPT"是专为初学者设计的,旨在帮助他们掌握JavaScript的基础概念和核心技能。 首先,JavaScript的核心构成包括变量、数据类型、控制结构、函数和对象。变量是存储数据的地方,JavaScript支持...
个人Javascript学习笔记 精华版 本资源为个人Javascript学习笔记的精华版,涵盖了Javascript的基础知识、事件处理、对象和系统函数、浏览器对象等方面的内容。下面是对每个知识点的详细说明: 1. 什么是JavaScript...
JavaScript学习指南第三版,学习JavaScript的同学欢迎来下载
在“javascript学习资料(ppt+代码)”这个压缩包中,我们可以期待找到一系列关于JavaScript的学习资源,包括PPT演示文稿和实际的代码示例。PPT通常会包含JavaScript的基础概念、语法特性、函数、对象、数组、循环、...
《PHP、MySQL与JavaScript学习手册 第4版》是一本针对初学者和进阶者全面讲解这三种技术的权威指南。本书旨在帮助读者掌握Web开发的核心技能,通过理论结合实践,深入理解PHP、MySQL和JavaScript之间的协作关系,...
这个压缩包中的“史上最全的JavaScript学习资料”显然包含了一系列丰富的资源,旨在帮助学习者深入理解和掌握JavaScript。 JavaScript最初由Netscape公司的Brendan Eich设计,目的是为了解决网页动态交互的问题,使...
这份"Javascript学习资料"包含了对这门语言深入理解和实践的关键知识点。 标题中的"Javascript学习资料"表明这是一个针对初学者或者希望提升技能的开发者的学习资源集合。其中包含了一本名为"10步学习 JavaScript....
JavaScript学习资料大全,包括《JavaScript实例》、《JavaScript教程》、《Javascript语言教程》、《JavaScript技术讲座》、《Javascript源码大全1.0版》、《javascript教程.chm》、《JavaScript源代码集》、...
这份"JavaScript学习帮助文档"是专为初学者设计的,旨在帮助他们掌握JavaScript的基础知识和实际应用技巧。 首先,JavaScript的基本语法是学习的起点。它是一种基于原型的、动态类型的、弱类型的脚本语言。这意味着...
以下是一些关于JavaScript学习的重要知识点: 1. **基础语法**:JavaScript的基础包括变量、数据类型(如字符串、数字、布尔值、null、undefined、对象和数组)、操作符(算术、比较、逻辑、赋值等)、流程控制...
这份"javascript学习资料"包含的JavaScript1.ppt、JavaScript2.ppt、JavaScript3.ppt三个文件,很可能是系列讲座或教程的课件,它们会详细讲解JavaScript的基本概念、语法和常见应用。 首先,JavaScript的基础部分...