美文网首页
JavaScript学习笔记-JavaScript概述

JavaScript学习笔记-JavaScript概述

作者: 莫名FCJ | 来源:发表于2017-10-26 13:53 被阅读11次

    特点

    具有面向对象能力的、解释性的程序语言
    基于对象和事件驱动,并具有相对安全的客户端脚本语言
    松散性:变量不必具有一个明确的类型
    对象属性:对象把属性名映射为任意的属性值
    继承机制:基于原型的继承机制
    ECMA(欧洲计算机制造商协会)标准化:ECMAScript,ECMA-262

    JavaScript核心

    核心(ECMAScript)
    文档对象模型(DOM):HTML中的树
    浏览器对象模型(BOM):没有标准
    ECMAScript组成:语法、类型、语句、关键字、保留字、操作符、对象

    语法

    区分大小写
    标识符组成:字母、、$开头,其他字符为字母、数字、、$
    字面量:{x:1, y:2}对象字面量表达式;[1, 2, 3, 4, 5]数组字面量表达式
    声明变量:var box; var box = 100; 声明变量没有初始化时值为undefined
    var box = 100;和box = 100;作用域不同

    数据类型

    5种简单数据类型:undefined、null、boolean、number、string
    1种复杂数据类型:object
    不支持自定义数据类型
    typeof 获取变量类型
    {}为空的对象,对象已创建,但没有东西;null为空对象,表示没有创建
    var box = {};和var box = new Object();相同
    typeof为操作符,而非函数
    建议变量声明时初始化;var box = ""; var box = 0; var box = false; var box = null;
    undefined派生于null,两者相等,但类型不同,所以 undefined == null true; undefined === null false
    number类型:八进制0开头,16进制0x开头
    单引号和双引号用于字符串时完全相同,但必须成对

    运算符

    ===表示恒等,需要类型和值均相等才为true
    逻辑运算&& || !

    函数

    JavaScript函数不支持重载

    对象和数组

    对象包含属性和方法
    对象属性名可以加引号,与不加引号相同
    数组中每个元素可以保存任何类型
    数组也是object类型
    toString()方法和valueOf()方法作用相同
    数组拥有栈方法push()和pop(),后进先出
    数组拥有队列方法push()和shift(),先进先出,unshift()方法可为数组前端添加元素
    reverse()逆向排序,sort()正向排序,可以传排序函数作为参数
    splice()方法可以支持删除、增加、替换元素

    函数类型

    函数实际上是对象
    函数可以作为参数传递给函数
    函数内部有两个特殊的对象arguments和this
    arguments包含了传入函数的所有参数
    arguments.callee指向函数本身
    函数有两个属性length和prototype

    变量、作用域和内存

    变量类型:基本类型(放在栈)和引用类型(放在堆中的对象)
    所有函数参数都是按值传递,不会按引用传递
    数组、对象、正则表达式都是对象
    instanceof Array、instanceof Object、instanceof RegExp
    全局变量和局部变量
    没有if/for类块级作用域
    函数中带var为局部,不带var为全局,不建议不使用var来初始化变量
    JavaScript具有自动垃圾收集机制
    一旦不再使用,将其设置为null,加速垃圾回收

    内置对象

    Global和Math
    全局变量和全局函数,均属于Global对象
    eval方法执行字符串代码

    面向对象与原型

    JavaScript没有类的概念,只有对象
    工厂函数可以解决多个对象重复实例化的问题
    可以采用构造函数创建特定对象,构造函数类似其他语言中的类
    构造函数:第一个字母必须大写;必须new 构造函数
    构造函数用普通函数方式调用一般无效,必须使用new运算符
    每个函数都有一个prototype属性,它是个对象
    JavaScript继承依靠原型链实现

    function Box() {
        this.name = "Lee";
    }
    
    function Desk() {
        this.age = 100;
    }
    Desk.prototype = new Box();
    
    var desk = new Desk();
    console.log(desk.age);
    console.log(desk.name);
    

    匿名函数和闭包

    闭包是指有权访问另一个函数作用域中的局部变量的函数
    优点同时是缺点:可以把局部变量驻留在内存中,可以避免使用全局变量

    function box() {
        var age = 100;
        return function() {
            age ++;
            return age;
        }
    }
    
    var b = box();
    console.log(b());
    console.log(b());
    

    因会更加消耗内存,建议在非常必要时使用闭包
    闭包不属于对象的属性或方法,在运行时this指向window

    相关文章

      网友评论

          本文标题:JavaScript学习笔记-JavaScript概述

          本文链接:https://www.haomeiwen.com/subject/fsqkpxtx.html