zoukankan      html  css  js  c++  java
  • js总结

    JS总结

    一、词法结构

    1.区分大小写

    2.注意 //单行 /* 多行注释 */

    3.字面量(直接量 literal)

     12 数字

     5.8 小数

     “hello” 

     ‘hello’

      true

    /js/gi //正则

    null //空

    {x:1,y:2}

    {1,2,3,4}

    4.标识符(变量)和保留字

    5.分号可以省略但是可能会产生问题,js会自动补

     

    二、类型、值和变量

    1.原始类型 数字 字符串 布尔 null空 undefined未定义

    2.对象类型

    3.类 Array Function Date RegEx Error

    4.js解析器 中集成了垃圾回收

    5.任意js的值都可以转成布尔值

    undefined null 0 -0 NaN “” 都被转换为false

    6.包装对象

     var = “hello”; //原始类型(没有方法)

    s.len = 4; //当调用原始类型的属性或方法的时候(原始类型是没有属性和方法的)

     //只要引用了字符串的属性或方法,就会调用new String(s)把原始类型,包装成对象

    //以后调用了s.len是调用String对象的属性和方法,一旦引用结束,新创建的临时对象会销毁

    var n = s.len //此时为undefined

    alert(n);

     //调用字符串 布尔 数字的属性或方法时,创建的临时对象。是包装对象

    显示定义包装对象 var S = new String(“hello”)

    var s = “hello”;是不同的

    7.==和===

    8.类型转换

    var n = 7;

    alert(n.toString(2)); //二进制 10001

    alert(n.toString(8)); //021

    alert(n.toString(16)); //0x21

    alert(n.toString(10));  alert(n.toString());

    9.toString() valueOf()

    var date = new Date(2011,1,3);

    date.value() 返回毫秒数代表的时间

    10.js是动态类型 var n=10; 程序运行期间 才会确定变量的类型

    11.变量作用域

    函数作用域和声明提前

    函数内定义的变量 声明自动提前到函数顶部

    12.作用域链scope chain

    在不包含函数的函数体内,作用域链有两个对象,第一个是定义函数

    参数和局部变量的对象,第二个是全局对象

    在一个嵌套函数体内,作用域链上至少有三个对象

    定义一个函数时,它保存了一个作用域链。调用函数时,它创建一个新的对象存储它的局部变量,并将这个对象添加到保存的那个作用域链上,同时创建一个新的更长的表示函数调用作用域的“链”。对于嵌套函数没错调用外部函数时,内部函数会重新定义一遍。每次调用外部函数的时候作用域链是不同的。

    13.delete in eval void

    第五章 对象

    1.对象的基本操作 create set query delete test enumerate

    2.对象的属性特性 可写 可枚举 可配置(是否可删除)

    3.对象的对象特性

    对象的原型 prototype

    对象的类 标志对象类型的字符串

    对象的扩展标记 是否可添加新属性

    //创建对象的三种方法

    4.对象直接量

     var empty = {};

     var point - {x:0,y:0}

    5.new 创建对象

    var o = new Object{}; 空对象 和{}一样

    var a = new Array();

    6.Object.create()

    var o1 = Object.create{{x:1,y:2}}; //o1继承自对象原型{{x:1,y:2}}

    var o2 = Object.create{null} //o2不继承任何属性和方法

    var o3 = Objet.create(Object.protptype); //空对象和{}new Object()一样

    7.属性的操作 作为关联数组的对象

    object.property

    object[“property”] 散列 映射 字典 关联数组

    8.继承

    js的继承只能从父类获取属性的值,而不是修改原型链

    如果对象book为null或underlined

    book.subtle.length 会报错

    解决方法

    var len = book && book.subtitle&&book.subtitle.length;

    删除属性

    delete book.subtitle

    检测属性

    in has()OwnPreperty() propertyIsEnumerable()

    var o = {x:1};

    “x”in o

    “toString” in o

    hasOwnPreperty();判断属性是否是自己的。继承属性返回false

    propertyIsEnumerable()只有是自有属性,并可枚举

    获取所有属性

    Object.keys();

    Object.getOwnProepertyNames()

    9.属性 getter 和 setter

    var o ={

    x:0;

    y:1;

    set r (value){value = this.r;}

    get r(){return this.x + this.y}

    };

    x是数据,r存取器属性

    10.属性的特性 ecmascript5 老的ie不支持如下用法

    数据属性的特性:值value 可写性writable

    可枚举 enumerable

    可配置 configurable

    存取器属性特性: get set

    可枚举 enumerable

    可配置 configurable

    //返回{value:1,writable:true,remunerable:true,configurable:true}

    Object.getOwnPropertyDescriptpr{{x:1},x}

    //查不到属性 返回undefined

    设置属性的特性 不能修改继承的属性特性

    Object.defineProperty()

    //设置不可枚举属性

    var o = {};

    Object.defineProperty(o,”x”,{

    value:1,

    writable:true,

    remunerable:false,

    configurable:true

    })

    //设置只读

    Object.defineProperty{o,”x”,{writable:false}}

     

    修改多个属性特性

    Object.defineproperties()

    扩展Object.protptype 书 P137

    11.对象的三个属性

    prototype class extensible attribute

    查询对象的原型

    ecmascript5 中 Object.getProrotypeOf(o1)

    ecmascript3 中 o1.constructor.prototype

    通过对象直接量或new Object()方式创建的对象

    包含一个constructor的属性,指Obcjet()的构造函数

    constructor.prototype才是真正的原型

    p.isPrototypeOf{o}检测对象p是否是o的原型

    //获取对象的类型 字符串

    Object.prototype.toString.call(o1).slice(8,-1)

    12.对象的可扩展性

    对象是否可以新加属性

    Object.preventExtensions() 设置对象不可扩展

    Object.isExtenslible()

    Object.seal()除了将对象设置为不可扩展,还将属性设置为不可配置

    Object.freeze()

    除了将对象设置为不可扩展。将属性设置为不可配置,还把属性设置为只读

     

    第八章 函数

    1.函数调用 方法调用

    function t(){}

    t(); 函数调用 this是全局对象 严格模式下是undefined

    var o = {a:function(){}};

    o.a() 方法调用 this是当前调用的对象

    2.构造函数调用

    car o = new Object(); var o = new Object;

    o 继承自构造函数的prototype属性 内部的this是此对象

    var r = new o.m(); 中的this不是o

    3.P184 函数的执行用到了作用域链,这个作用域链是函数定义的时候创建的。

    嵌套的函数f()定义在这个作用域里,其中的变量scope是局部变量

    作用域链

    调用s()将创建函数s的执行环境(调用对象),并将该对象置于链表开头,

    然后将函数t的调用对象链接在之后,最后是全局对象。然后从链表开头寻找变量name

    调用ss() ss()==>t()==>window

    name=“lwy”;

    function(){

    var name=“tlwy”;

    function(){

    var name = “slwy”;

    console.log(name);

    }

    function ss(){

    console.log(name);

    }

    s();

    ss();

    }

    t();

    每次调用函数,都会生成一个新的作用域链。包括新的内部变量。

  • 相关阅读:
    黑客无处不在
    微博对我的影响
    WPF Chart DynamicDataDisplay的横坐标显示日期的解决方案
    java虚拟机中的字节码
    python解释器的使用
    Python学习环境设置
    变量的概念
    创建虚拟环境和常用包
    第三章笔记
    第一章笔记
  • 原文地址:https://www.cnblogs.com/lizixiansheng/p/6031563.html
Copyright © 2011-2022 走看看