zoukankan      html  css  js  c++  java
  • JS重修札记

    1.javascript 现在泛指按照 ECMAscript Edtion 3 实现的语言。spiderMonkey是 javascript在Mozilla开源项目中的名称。

    2.javascript的执行分为“语法分析期”和“运行期”。有些看起来正确的代码却不能通过语法分析。如

    function test(){
        //code here
    }();

    3."var x=3"中的"="是语法分隔符,具有二义性。这一点还是需要将javascript执行分为两个时期来理解。

    4.两个引用之间如果等值(==),则一定全等(===)。

    5.“表达式”、“语句”、“表达式语句”是三个容易模糊的概念。

    6.javascript中任何语句和表达式都有返回值,这对某些优雅的写法起到了重要影响。

    7.逻辑运算符"||"和"&&"返回的是运算元而不是bool值。

    8.比较运算符,对于“非字符串”时,先自动转化成数字再比较。

    9.运算符中的void ,  ? :  ,  () , "," 是作用于表达式的。优先级各有不同。

    10.javascript的变量作用域是函数级的,不是语句级的,所有声明在for(var i ...)的i,再外部也可用。

    11.函数调用( functionName() )的functionName其实是运算元,()是运算符,称为强制运算符。

    12.new 是运算符,使用" new comstructer()"这种形式来声明示例,内置原理并不是“产生示例,并调用构造函数”。而是“创建实例,实例传入constructor作为this指针。如果constructor有引用类型的返回值,则抛弃this,直接使用返回值作为实例。如果返回值为值类型,则抛弃返回值。仍然使用创建的实例”。以此为基础可以实现单利。

    13.delete只能删除实例的属性,不能删除父类属性。如果实例与父类有重名属性,删除后实例将重新使用父类属性值。

    14.因为1.3版本前没有实现"in"运算符,所以使用if(a.b)这种判断。现在应统一使用 in 进行判断。防止属性值为null或者其他特殊情况时判断出错。

    13.[]具有“数组直接量”和“取对象属性”两种含义,组合使用会产生奇特效果,特比当同时使用“,”作为“语法分割符”和“连续运算符”时。如" [a,b,[a,c][1,2]] "。

    14.空对象(null)是属于对象类型,但是没有属性,不是由object构造出来的。

    15.空的对象({}),具有object原型一切属性。只是实例属性为空。

    16.javascript中,对象实例没有原型(prototype),构造器(函数类型)才有原型,并且是当需要作为构造器使用时,才产生原型。该原型是一个标准的object构造器的实例,不过该实例的constructor属性被自动赋值为当前函数。

    17.原型也是一个对象实例,这是“原型继承体系”与“类继承体系”的不同。类继承体系中,类不需要是“对象”。

    18.javascript的实例创建机制是“对原型属性进行写时复制”。

    19.proto是对象实例的不可见属性,指向产生实例的原型。

    20.使用原型继承时,如果需要回溯,需要通过constructor修正原型链。

    21.javascript是惰性求值的,也就是传入的参数不管要不要用,都会对它求值。

    22.函数是第一型的意思是,函数是“第一类数据类型”。“第一类”强调的是“不可分解的,最高级别的,不被重述的”。

    23.javascript中的第一型有六种:undefined  string  boolean  number function object.

    24.“闭包”是函数在执行期的一个动态概念。包括“函数实例的环境、引用、以及由upvalue组成的数组”。

    25.一份函数代码可以有多个实例,一个函数实例可以有多个引用。

    26.函数产生实例通常是将函数赋值到一个新对象的属性时(通过原型继承来的不会产生实例)。

    27.对象属性与变量没有本质差别;全局变量实际上是全局对象的属性;局部变量实际上是“调用对象”的属性。

    28.“调用对象”是内部数据结构,是闭包的相关元素。

    29.闭包与函数实例的生存周期是分开管理的。函数被调用时,总是初始化一个闭包。上次的闭包是否销毁。取决于闭包中是否有被其他闭包引用的变量。

    30.形参与无值局部变量重复时,取形参,否则取局部变量。

    31.构造器的原型创建自系统内部的对象系统,不是可被外部覆盖的标示符。

    32.javascript中存在两套对象系统,一套是元类型系统(第一型),包括六种;另一套是对象类型系统,是object的分支。javascript通过包装类将两者统一。

    33.关联数组是对象系统的基础。

    34. new运算符后跟一个对象会报错,即使给这个对象指定prototype属性以及它的constructor。说明new运算符是根据后面的类型来判断的。并且是执行期报错。

    补充:

    35."="赋值表达式返回的也是右边的运算元。

    36.使用new产生的实例,只继承从prototype得来的属性,并且不同实例的属性指向同一个引用。只有constuctor里面对this属性进行赋值,才能产生不同实例的属性不指向同一个引用。在函数外对函数增加的属性,不会被继承到实例里。

    37.函数实例和“由函数作为constructor产生的对象实例”是不同概念。

  • 相关阅读:
    golang版本管理工具gvm
    golang问题101
    服务器部署Jupyter Notebook
    Python 获取MySql某个表所有字段名
    Python自带HTTP文件传输服务
    log4net 配置
    GridView控件RowDataBound事件中获取列字段值的几种途径
    最简单去Button回车事件
    oracle 多条执行语句同时执行
    MERGE Into
  • 原文地址:https://www.cnblogs.com/sskyy/p/2512839.html
Copyright © 2011-2022 走看看