2017.3.9 对象 函数
1 Javascript拥有七种数据类型,其中分为两类。原始数据和复杂数据类型。原始数据类型:包括 字符串,数组,数字,布尔值,Null,Undefined。复杂数据类型:包括 对象。
对象是Javascript的核心概念,也是最重要的数据类型。Javascript所有数据都可以视为对象。都可以使用内置的方法。但是除了两个例外,就是Null和Undefined。因此就会有例如length的属性,如false.length,'1abc'.length 都不报错。实际情况是通过包装对象的方式变换,例如 str是string(基本类型),本身是没有方法的。
当尝试把基本类型的str当做对象一样访问时,例如:str.length;
解释器会创建一个临时的包装对象,伪代码:
[[tempObj]] = new String(str);
[[tempObj]].length; // 返回具体的length;
delete [[tempObj]]; // 销毁临时对象
重复访问str.length会重复创建这个临时对象。
所以str.t赋值可以成功(临时对象赋值),但再次访问str.t返回undefined(另外的临时对象的值),因为每次创建的临时包装对象都是不同的。
任何对象都继承Object.prototype,所以都有Object.prototype中的方法
2 举例表示 (字符串类型)‘123’ 并不是 String(引用)类型的实例
3 创建对象的方法有
(1) var o1 = {};
(2) var o2 = new Object();
(3) var o3 = Object.create(null); null表明不继承任何对象,
如要继承某对象oT,则要改为 var o3 = Object.create(oT.prototype) 此时查看o3.__proto__ == oT.prototype ,表明o3 继承了oT;因此Object.create可表示克隆一份oT.prototype的内容赋值给o3;
4 对象的所有键名都是字符串,加不加双引号都可以。对象的键值如果是英文,则必须加引号,否则会当成变量处理。如果是数字,加了引号则当成字符串处理,不加引号当成数字类型处理。
5 Javascript使用delete来删除属性。delete操作符只能用来删除对象本身的属性,而不能用于删除继承自原型的属性。delele也可以用于删除一个不存在的属性,不过也不会报错,会返回true
6 for...in循环用来遍历一个对象的所有属性。(es 6 中用强大的for-of循环
for (var value of myArray) {
console.log(value);
}
)
7 查看一个对象本身的所有属性,可以使用Object.keys 方法。
8 JavaScript中的传值分为两种方式,按值传递 与 按引用传递。基本类型都是按值传递,引用类型是按引用传递。在函数中用的较为明显。
a 基本类型按值
var a = 1;
function fn(num) {
num = 5;
}
fn(a);
console.log(a); //1
b 引用类型按引用
var arr = [2, 5];
function fn(Arr) {
Arr[0] = 3;
}
fn(arr);
console.log(arr[0]); //3
注意,如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。
var arr = [2, 3, 5];
function fn(Arr) {
Arr = [1, 2, 3];
}
fn(arr);
console.log(arr); // [2,3,5]
上面的问题可按照函数执行时的AO(VO)对象考虑,
AO = {
arguments:{
Arr:传来的为arr,但是后来替换为了[1,2,3],所以不影响变量arr
}
函数:
1 如果有同名参数,则取最后面出现的那个值,如果未提供最后一个参数的值,则取值变成undefined。
function keith(a, a) {
return a;
}
console.log(keith(1, 3)); //3
console.log(keith(1)); //undefined
此时arguments.length同样是2,但是变量a取第二个
http://www.cnblogs.com/Uncle-Keith/p/5776159.html
http://www.cnblogs.com/Uncle-Keith/p/5792485.html