JavaScript小笔记(二)

  1. for/in语句语法:
    for(variable in object)
        statement
    ariable是变量名,表示数组的一个元素或者对象的一个属性。在循环体statement内部,可以使用变量variable和“[ ]”来查询该对象属性的值。如下
    for(var prop in my_obj)
        document.write("name: " + prop + "; value: " + my_obj[prop]);
    注意:for/in并不会遍历所有对象的所有可能属性。对象的属性是只读的、永久的(不可删除的)或者不可枚举的,此时for/in不能枚举出来。
  2. 在try/catch/finally中,在try语句块中出现return、continue或break使控制流离开try块,那么在控制流到达新目的前,finally块会被执行。
  3. 检查属性的存在性的三种方法
    1)if("prop" in obj) ...
    2)if(obj.prop !== undefined) ...
    3)if(obj.prop) ...
  4. 访问对象属性的两中方式:
    1)obj.prop
    2)obj["prop"]
  5. JavaScript中的所有对象都继承自Object。
  6. JavaScript中的每一个Object对象都有一个constructor属性,它引用了初始化这个对象的构造函数。如
    var d = new Date();
    d.constructor == Date; //返回true
    d.constructor == Date与o instanceof Date都可以用来判断d的构造函数是否是Date。
  7. 数组调用toString方法,返回一个数组元素的列表,每一个元素都转换陈刚一个字符串。function函数调用toString则返回函数的源代码。
  8. 数组的创建
    1)直接量的方式:var a = [ 1, 3 ]; a = [ ]
    2)无参数调用:var a = new Array();
    3)指定数组的前n个元素的值:var a = new Array(4, 2);
    4)指定数组的长度:var a = new Array(10);
  9. JavaScript中的数组是稀疏的,意味着数组的下标不必落在一个连续的数字范围内,只有真正存储在数组中的元素才能够分配到内存。如下,只有下标为0和1000的元素分配到了内存,而下标为1-999的元素不分配内存
    a[0] = 1;
    a[1000] = "1000“;
  10. delete数组中的一个元素时并没有真正的删除该元素,元素本身还存在,只是把该元素的值设置为undefined。要真正删除一个元素,可以使用Array.shift()或Array.pop()或Array.splice()。
  11. 数组的length属性及可以读也可以写,如果给length设置了一个比它当前值小的值,就会发生截断,这个长度之外的元素会被抛弃。如果length设置的值比当前的大,那么新的,未定义的元素就会被添加到数组末尾以使得数组增长到指定的长度。
  12. 给函数传递参数时,如果传递的参数比函数需要的个数多,那么多余的值会被忽略。如果传递的参数比函数需要的个数少,那么所忽略的几个参数会被赋予undefined。
  13. Arguments对象是一个类似数组的对象,获取实际传递给函数的参数值。arguments[0]表示传递给函数的第一个参数值,arguments[n]表示传递个函数的n个参数值。arguments.length表示实际传递给函数的个数。Arguments对象还定义了callee属性,用来引用当前正在执行的函数。
  14. 函数的length属性表示函数声明时的参数个数。
  15. call()和apply()第一个参数都是要调用的函数对象,在函数体内值this的值。call的剩余参数是传递给要调用的函数的值。apply的剩余是用方括号括起来的参数值。
  16. Function()构造函数最后一个参数是函数体,前面的参数是要传递的参数。
    var f = function(x, y){return x+y;};
    var F = new Function("x", "y", "return x+y;");//与上面等价
  17. var obj = new Object();在创建这个空对象后,new设置了这个对象的原型,一个对象的原型就是构造函数的prototype属性的值。所有函数都有一个prototype属性,当这个函数定义时,prototype属性自动创建和初始化。prototype属性的初始化值是一个对象,这个对象有个constructor属性,它指回和原型相关联的构造函数。添加个这个原型对象的任何属性,都会成为构造函数初始化的对象的属性。
  18. 原型是放置方法和其他不变属性的理想地方。
  19. 使用原型对象可以显著的减少每个对象所需的内存数量,因为对象可以继承原型的很多属性。即便在对象创建后才添加到原型中的属性,对象也可以继承它。这意味着可以为已有的类添加新的方法。
  20. 类属性:Obj.prop = ”property“;
  21. 原型对象本身是一个对象,它由Object()构造函数创建,这意味着原型对象继承了Object.prototype属性。基于原型的继承并不限于一个单个的原型对象,而是包含了一个原型对象的链。因此,Obj类的对象就继承了Obj.prototype和Object.prototype属性。当在查询某个属性的时,首先查询这个对象本身,若未查到,则沿着原型链依次查询Obj.prototype和Object.prototype对象。若在中途找到了该属性,就不继续查找了。
  22. 调用被覆盖的方法:Obj.prototype.toString.apply(this);
  23. typeof 布尔值:boolean
    typeof 数值:number
    typeof 字符串:string
    typeof null或对象或数组:object
    typeof undefined:undefined
    typeof 函数:function
  24. 下面的表达是都为true
    typeof f == "function"
    f instanceof Function
    f instanceof Object
  25. 根据目录创建名字空间,该空间内有define和provide两个方法。假设目录flanagan/Class.js
    var flanagan;
    if(!flanagan) flanagan = {};
    flanagan.Class = {};
    flanagan.Class.define = function(data){};
    flanagan.Class.provide = function(o, c){};
  26. 根据域名创建名字空间,该空间内有define和provide两个方法。假设该域名lxzflanagan.com
    var com;
    if(!com) com = {};
    else if(typeof com != "object")
        throw new Error("com已经存在");
    if(!com.lxzflanagan) com.lxzflanagan = {};
        throw new Error("com.lxzflanagan已经存在");
    if(!com.lxzflanagan.Class)
        throw new Error("com.lxzflanagan.Class已经存在");
    com.lxzflanagan.Class = {
    	define: function(data){},
    	provide: function(o, c){}
    };
  27. 测试一个模块的可用性
    if(!com || !com.lxzflanagan || !com.lxzflanagan.Class) com.lxzflanagan = {};
        throw new Error("com.lxzflanagan.Class不存在");
  28. JavaScript不能明确的区别私有与公有标记。通常我们通过文档说明的方式来告诉开发者哪些公有哪些私有,开发者要严格遵循API文档的说明来使用。还可以通过在私有变量前加下滑线来标记私有属性,如_name。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值