600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Javascript高级程序设计——基本类型和引用类型的值

Javascript高级程序设计——基本类型和引用类型的值

时间:2019-05-04 20:57:37

相关推荐

Javascript高级程序设计——基本类型和引用类型的值

ECMAScript中的变量有两种不同的数据类型的值:

基本类型:基本类型的值是简单的数据段。包括:Undefined、Null、Number、Boolean、String五种

引用类型:引用类型的值是保存在内存中的对象,引用类型对象保存的是指针。

当复制变量时,对于基本类型,会在变量对象上创建新值,然后把该值复制到新变量分配的位置上。

对于引用类型,同样也会把储存在变量中的值复制一遍,只不过这个变量储存的是指针。指针指向储存在堆中的对象:

传递参数:

ECMAScript中所有函数的参数都是按照值传递的,即把函数的外部的值复制给一个局部变量arguments对象中的一个元素。传递引用时会把引用的内存地址复制给这个局部变量,所以局部变量的变化会反映在函数外部。

function setName(obj){obj.name = "yangxunwu";}var person = new Object();setName(person);alert(person.name)//"yangxunwu"这个示例中的引用类型传递给函数参数时,其对象的地址被复制给函数参数,所以setNme()内部对对象添加属性时,也会反映到外部person对象中。

function setName(obj){obj.name = "yangxunwu";obj = new Object();obj.name = "new name"; } var person = new Object();setName(person);alert(person.name);//"yangxunwu"对象传递给函数时只是把地址复制给内部变量arguments,所以第一个obj.name="yangxunwu",修改了外部的对象的属性,当obj = new Object()时,局部变量被重新赋值,这个值是局部对象的值,所以即使添加了属性,这个局部对象也会在函数执行完自动销毁。如果是引用传递,那么这里的外部person对象的name属性会被修改为”new name“,但javascript的函数参数是值传递,所以这里依旧输出”yangxunwu“.

检测类型

对于基本数据类型用typeof操作符,typeof对于引用类型一律返回object

基本数据类型:

typeof 4 //Numbertypeof "4"//Stringtypeof null//Object

对于引用用类型,使用instanceof操作符类判断是什么类型的对象,所以引用类型都是Object实例,所以始终反悔true,基本数据类型不是对象,所以始终为false。

person instanceof Object; //true5 instanceof Object//false

执行环境和作用域

1、执行环境定义了变量或函数有权访问的其他数据,每个执行环境都有与之相关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中。

2、全局执行环境是最外围的一个执行环境,Web浏览器中全局执行环境是window对象,执行环境中的代码全部执行完后,环境被销毁,所以函数和变量也被销毁。

3、代码执行时会创建一个作用域链,用途是保证对执行环境有权访问的所有变量和函数的有序访问,作用域前端是当前执行代码的环境的变量对象,下一个变量对象来自包含的外部环境,直到全局环境。

4、标示符查询是沿着作用域链一级一级的搜索,搜索到之后就停止搜索,所以标示符相同的局部中的变量会屏蔽外部变量。

延长作用域链with和try-catch:

对于with语句来说,会将指定的对象添加到作用域链中,对于catch,会创建新的变量对象,包含错误对象的声明。

function buildUrl(){var loc = "http://";with(location){var url = href + loc;}return url;}

with将location对象所有属性和方法添加到了变量对象,然后变量对象被添加到作用域的前端,

with的内部定义了url变量,url也就成为了函数执行环境的一部分,所以可以作为函数被返回。

js没有块级作用域

for(var i = 0; i < 10; i++){....}alert(i) //10

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。