《JavaScipt权威指南》学习笔记

1.数据类型——
    原始类型(不可变类型):
        数字(10和16进制)
        字符串
        布尔值
    特殊原始值:
        undefined:代表变量未初始化,对象属性和数组元素不存在,函数无返回值对象(系统级的错误的值空缺),
        null:代表变量是空值,特殊的对象(程序级的正常的值空缺)
        if(undefined==null) → true
        if(undefined===null) → false
        if(undefined || null) → false 
    对象:(可变类型)
    (1)普通对象:构造函数的实例
        Math,
        JSON,
        location,
        localStorage
    (2)构造函数:
        对象类(Object)
        函数类(Function)
        数组类(Array)
        日期类(Date)
        正则类(RegExp)
        错误类(Error)
    所有对象都是Object类型,所有函数和构造函数都是Function类型
2.变量——
    垃圾回收机制,不分类型
    函数作用域:只要在函数内任意位置出现过声明(所以函数变量声明最好统一到开头)
    因为变量声明和子函数会被提到函数最开头执行
    全局作用域:未曾出现过声明则会一层层引用上一个函数作用域的变量,一直到全局变量
3.全局对象:
    Window构造函数的实例,通过window,this获取。
    全局变量 == 全局对象的属性
4.包装对象:
    String,Number,Boolean
    当原始值引用属性和方法时,系统创建对应包装类临时对象去处理,如
    "abc".indexOf("a"),"abc".length
    if("abc" == new String("abc")) → true
    if("abc" === new String("abc")) → false
4.构造函数:
    function fun () {
        this.a = "1";
        this.b = function() {};
    } 
    //静态变量和静态函数,其实就是给变量fun赋属性
    fun.c = "2";
    fun.d = function() {};
5.函数:
    (1)定义方式
        new Function(参数,参数,方法体字符串)  ——  所有的函数都是Function的实例
        function a() {}  ——  默认在顶部创建变量a,赋予此函数。手动创建变量a会覆盖,使原方法不能用。
        var a = function() {} —— 函数表达式,右边是匿名函数,先定义后使用
        var a = function aa(){} -- aa将作为函数的局部变量,递归时aa和a都可用
        var c = a;  —— 将变量a赋给变量c,调用c()同样可以执行
    (2)调用方式
        function fun(value) {
            this.bb = value;
        }
        var a = {},c={};
        a.fun = fun;

        fun(1); //函数调用:this是window;
        a.fun(1); //方法调用:this是a;
        var b = new fun(1); //构造函数调用:this是b
        fun.apply(c,[1]); //间接调用:this是c
        fun.call(c,1);

6.创建对象:
    new构造函数,
    普通对象 {} = new Object(),
    数组对象 [1,,3,] = new Array()
  设置对象属性和方法:
    在构造器中:this.a = "1"; 
             this.b = function() {};
    在对象中:object.a/object["a"]="1";
            object.b = function() {};
  获取对象属性和方法
    object.a/object["a"]; object.b()

7.常用运算符
    typeof:返回类型字符串,对于对象都返回Object
    instanceof:判断类型,返回布尔值
    eval():参数不是字符串则返回参数,否则执行字符串,返回执行结果
           可以eval("({a:1,b:2})")将json字符串转成json对象
    delete:删除属性
    in:检测属性是否存在(包括继承的属性)
    for/in:遍历对象可枚举的属性或数组的成员;会遍历自身的属性,方法,以及继承的属性
    JSON.stringify():将对象可枚举的自身属性转为字符串
8.存取器属性
    var a = {
        aa:1,
        get cc() {
            return this.aa;
        },
        set cc(value) {
            this.aa = value;
        }
    };
    a.cc = 4;
    alert(a.cc);//返回4

8.属性的特性
    数据属性的特性:value(值),writable(可写性),enumerable(可枚举性),configurable(可配置性)
    存取器属性的特性:get(读),set(写),enumerable(可枚举性),configurable(可配置性)
    相关方法:
    hasOwnProperty():检测自身属性是否存在
    propertyIsEnumerable():检测自身是否属性且可枚举的
    Object.keys(对象):返回对象的可枚举的自身属性名称的数组
    Object.getOwnPropertyNames(对象):返回对象所有的自身属性名称的数组
    Object.defineProperty(b,"aa",{value:2,
                                  writable:true,
                                  enumerable:false,
                                  configurable:true}) :设置对象属性特性
    Object.definePropertys({},{
    x:{value:2}
    y:{get:function(){return 1;},set:undefined}
    })
    Object.getOwnPropertyDescriptor(b,"aa"):返回对象自身属性的特性的描述

     不可配置详解:
        (1)不能编辑可配置性和可枚举性,可写性只能由true设为false
        (2)数据属性和存取器属性不能相互转换,存取器属性不能更改setter和getter方法
        (3)属性不能删除

6.对象的原型属性
    每个对象都从原型对象继承属性,根原型对象就是Object.prototype
    指定原型:
    Object.create(原型)
    为构造函数指定原型属性prototype
    获取原型:
    Object.getPrototypeOf(对象);
    检查原型:
    原型.isPrototypeOf(对象)
7.对象的类属性
    Object.prototype.toString.call(对象):获取类属性
8.对象的可拓展性:是否可以添加新属性
    判断是否可拓展:Object.esExtensible(对象)——(删改查)
    设置为不可拓展:Object.preventExtensions(对象),设置后不可逆转,仍会继承给原型的新属性
    判断是否封闭:Object.isSealed(对象)——(改查)
    设置为封闭:Object.seal(对象),属性不可拓展,不可配置。不能解封
    判断是否冻结:Ojbect.isFrozen(对象)——(查)
    设置为冻结:Object.freeze(对象),属性不可拓展不可配置,数据属性为只读
7.数组
    创建数组:[1,2],new Array(),new Array(1),new Array(1,2)
    添加元素:push(),unshift()
    删除元素:pop(),shift()
    数组的方法:
        join() 以参数作为分隔符,将数组转为字符串
        reverse() 将数组中的元素颠倒顺序
        concat([1,2]) 连接2个数组,返回一个新数组
        slice(0,3) 返回一个子数组 
        splice(a,b,c,d) a:操作的位置,b:删除的个数,c,d:插入的元素 返回被删掉的元素组成的数组
        indexOf() 具有给定值的元素的索引
        lastIndexOf() 具有给定值的最后一个元素的索引
7.闭包:
(1)变量作用域由函数定义时决定,所以函数对象内部状态还包括作用域链
(2)作用域链是定义作用域中变量的对象列表,函数内部的变量都可以保存在作用域链中。
(3)例子--当外部函数返回嵌套函数对象,并在外面执行嵌套函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值