Translate

Zephyr - Study: JavaScript (1)

 1. JavaScript

    JavaScript 包含三个部分:ECMAScript / DOM / BOM
        ECMAScript:js的标准
        DOM:文档对象模型
        BOM:浏览器对象模型

    JS 代码写的位置:
        1. 写在script标签中 (script标签放在body的最后)
        2. 写在属性中,如 href属性标签中 / onclick属性标签中 (不推荐 过于耦合)
        3. 写在外部文件,然后用script标签引用 (推荐) <script src="index.js"></script>

    alert: 弹出一个警告框
    document.write(): 向body中输出内容 
    console.log(): 向控制台输出内容


2. 语法

    1. 注释:      /*   多行注释
                        */
                     // 单行注释 

    2. JS 严格区分大小写

    3. 每一句以;结尾
    
    4. 用 var 声明变量          var a;

    5. 用typeof 检查数据类型       typeof a;

    6. typeof Null  -> object

    7. 数据类型的转换:
            转string
            1)b = a.toString() 转换结果为返回值 a不会改变
            2)b = String(a)
                区别:1)不能转 null 和 undefined       2)可以转

            转number
            3)使用 Number()
            4)  针对字符串 用 parseInt() / parseFloat()
                   讲有效的整数部分转化为数字
                   从左到右 取出数字

    8. object 对象数据类型
            var obj = new Object();

    9. JS 的变量都是保存在栈内存中的,
        基本数据类型的值直接在栈内存中保存
        值与值之间独立存在,不互相影响
        
        对象是保存在 堆内存
        栈内存里放内存地址
        如果两个变量指向同一个对象,修改对象,两个变量的都会修改

        比较基本数据类型,比的是值
        比较引用数据类型,比的是地址

    10. 创建object对象 可以直接用 {}
            var obj = {属性名:值,属性名:值...};

    11. 函数
            function 函数名(形参) {
                
}

    12. for (var n in obj) {
            console.log(n);         // n是obj的属性名
            console.log(obj[n]);   // []可以传变量,.n 不可以
}

    13. 全局作用域中有一个全局对象 window
         代表浏览器的窗口
         当在全局作用域中创建变量的时候,都会作为window对象的属性保存

    14.    var 创建的变量会被提前声明
            function 函数名 () {} 这种方法创建的函数,会在所有代码执行前就被创建

    15. 在调用函数的时候,都会向函数内部传递一个隐含的参数 this
            this 指向一个对象 (上下文对象)
            根据调用方式不同,this 指向不同的对象
                    1) 以函数形式:指向window
                    2)以方法形式:指向调用方法的对象

    16. 构造函数 
            function Person(){
                this.name = "a";
                this.age = 16;
}
            var p1 = new Person();

        * 构造函数其实就是函数,但是与new搭配用的时候 可以用来创建对象
            习惯上 首字母大写

        * 构造函数执行过程:
            1)立刻创建一个新的对象
            2)将新建的对象设置为函数中的this
            3)逐行执行函数中的代码
            4)将新建的对象作为返回值返回

    17. 原型 prototype
            每创建一个函数,解析器就会向函数中添加一个属性 prototype
            这个属性是一个对象

            如果函数作为普通函数调用prototype没有任何作用
            当函数以构造函数调用的时候,他所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象;可以通过__proto__来访问该属性

            原型对象就相当于一个公共区域,所有同一类的实例都可以访问到这个原型对象
            所以!!我们可以将对象中共有的内容,统一设置在原型对象中

            当我们访问对象的一个属性或方法时,他会先在对象自身中寻找,如果有则直接使用,如果没有,就去原型对象中寻找

            

            好处:1)在创建对象的时候 不会新建一个对象就新建一个方法;2)也不会污染全局命名空间(因为解决 1 的另一个方法就是建一个全局函数)

    
        18. 垃圾回收 GC
            什么是垃圾:没有变量或属性对其引用的对象
            在JS中有自动的垃圾回收机制,不用手动操作














No comments:

Post a Comment