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

 
posted @ 2017-03-09 13:56  a fine day  阅读(105)  评论(0编辑  收藏  举报