javascript学习第二课

主要内容:

1.不可变的原始值和可变的对象引用

javascript中的原始值(undefined、null、布尔值、数字和字符串)与对象(包括数组和函数)有着根本的区别。原始值是不可更改的;任何方法都无法更改一个原始值。

javascript学习第二课

通过上图可以看出,原始值的比较是值的比较:只有它们的值相等时它们才相等;对象和原始值不同,首先,它们是可变的--它们的值是可修改的;两个单独的对象永不相等。两个单独的数组也不相等。如果我们想比较两个单独对象或者数组,则必须比较它们的属性或元素。

2.类型转换:

如图:

javascript学习第二课

javascript学习第二课

注意:一个值转换为另一个值并不意味着两个值相等。比如,如果在期望使用布尔值的地方使用了undefined,它将会转换为false,但这并不表时undefined==false.

重复的声明和遗漏的声明:

使用var 语句重复声明变量是合法且无害的。如果重复声明带有初始化器,那么这就和一条简单的赋值语句没有什么两样。

javascript学习第二课

javascript学习第二课

变量作用域

变量的作用域(scope)是程序源代码中定义这个变量的区域。全局变量拥有全局作用域,在javascript代码中的任何地方都是有定义的。然而在函数内声明的变量只在函数体内有定义。它们是局部变量,作用域是局部性的。函数参数也是局部变量,它们只在函数体内有定义。

       在函数体内,局部变量优先级高级同名的全局变量。

javascript学习第二课

函数作用域和声明提前

在类似C语言的编程语言中,花括号内每一段代码都具有各自的作用域,而且变量在声明它们的代码之外是不可见的。我们称之为块级作用域。javascript中没有块级作用域 。取而代之地使用了函数作用域:

javascript学习第二课

javascript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。这意味着在声明之前甚至已经可用,javascript的这个特性被非正式地称为声明提前。如图:

javascript学习第二课

作为属性的变量

当声明一个javascript变量时,实际上定义了全局对象的一个属性,当使用var声明一个变量时。创建的这个属性是不可配置的,也就是说这 个变量无法通过delete运算符删除。

javascript学习第二课

引用数据类型数组:

数组是一个引用对象,其长度可变,元素内容也可以不一致,

如:var arr = [1,2,3,true,new Date()];

这个定义数组也是可以的。

javascript学习第二课

当我们调用数组对象时,其实隐式调用了数组对象的tostring()方法;所以此输出方法与console.info(arr.tostring())是一样的;

数组中splice方法应用:

javascript学习第二课

通过图示可以看出,splice操作数组本身;

concat与join示例:

javascript学习第二课

通过示例可以看出,concat方法与join方法都不会影响数组本身,但会生成新的对象;

ECMA5数组新特性:

indexOf(),every、filter、forEach、map、some

every:对数组中每一个元素进行处理比较,如果全部比较结果为真则返回true,否则返回false;

javascript学习第二课

filter:对数组的每个元素用一个函数处理,将过滤后的结果返回:

javascript学习第二课

map:对数组中每一个元素交给函数处理,并生成一个新的数据对象:

javascript学习第二课

some:对数组中每一个元素都进行遍历处理,如果有一个条件为真,则返回true,否则返回false;

javascript学习第二课

reduce:对数组中前一个元素和后一个元素作处理,遍历方式从右向左:

javascript学习第二课

上一篇:effective java学习笔记之不可实例化的类


下一篇:Effective Java学习笔记--创建和销毁对象