JavaScript高级程序设计

    技术2025-10-15  9

    JavaScript核心基础

    第一章——简介

    JavaScript组成

    ECMAscript

    只提供了语言基础

    BOM(Browser Object Model)

    纳入HTML5

    DOM(Document Object Model)

    浏览器基本支持

    第二章——HTML中使用JS

    <script defer="defer" async src="../" type="text/javascript"></script>标签

    属性

    type 类型(一般值为text/javascript),不写的话,浏览器默认也是这

    src

    外部引用时用到

    async(只适用于外部脚本)

    异步加载文件、在页面load之前,所以异步脚本不要修改DOM

    defer(只适用于外部脚本)

    延迟加载,延迟到整个页面都解析完毕了之后

    外部引入较嵌入的优点

    可维护性,将js文件与HTML文件分离,易于维护可缓存,引入外部脚本时,浏览器可根据引入链接将相同引用做缓存处理,下次使用时就不用再请求资源

    第三章——基本概念

    标识符

    开头只能用字母、下划线_、美元符$

    由字母、下划线、美元符、数字组成

    字母也可以是ASCII码、Unicode码

    建议驼峰写法

    严格模式

    全局严格模式、函数局部严格

    变量

    属于松散类型,可以保存任何值

    var 标识符

    局部变量

    函数体内定义的变量称为局部变量

    在函数调用时创建,执行结束时销毁,仅在函数中可调用执行,外部调用会报错 function foo(){ var msg="hello world"; console.log(msg) } //msg在foo函数内部定义,属于局部变量,在函数调用时创建,执行结束时销毁 console.log(msg)// undefined foo();// hello world

    注意

    函数体内变量未使用var声明,则声明的变量为全局

    function foo1(){ msg = "我是全局变量"; } console.log(msg)// 我是全局变量

    数据类型

    基本数据类型

    number string boolean null undefined

    复杂数据类型,其他类型最终都都是object衍生出去的

    object

    undefined

    变量定义(声明)后,未初始化(赋值),则默认值为undefined

    null

    一般赋值给变量准备在将来保存对象

    表示空指针对象,所以typeof null返回object

    undefined == null// true 本质上,undefined派生于null

    number 包括整数、浮点数(双精度),采用IEEE754格式,0.1 + 0.2 != 0.3,因为这种格式本身精度问题,所以不建议比较小数

    进制:严格模式下,八进制不生效

    数值范围

    +infinity/-infinity

    NaN(Not a Number)但是,typeof NaN === 'number'

    NaN与任何值都不相等,包括它本身(NaN==NaN// false)

    isNaN()方法,用于判断一个值是不是NaN

    如果是一个对象,则先调用valueOf(),判断是否可以转换为数值,不能则继续调用其toString()方法

    转换方法

    Number()

    Boolean值,true——1;false——0

    数值——数值

    null——0

    undefined——NaN

    string

    Number('123');// 123 Number('1.1');// 1.1 Number('011');// 11 不识别八进制 Number('0xf');// 15 Number('');// 0 // 除了上面的格式外,其他都返回NaN Number('123a')// NaN

    parseInt(),用于字符串转化

    匹配数字、负号、科学计数法e 从左向右,一直匹配第一个符合上述规则的字符,直至遇到了一个非上述规则的字符,则停止解析

    识别进制

    parseInt('123abc');// 123 parseInt('1.1');// 1 parseInt('');// NaN

    可传入第二个参数作为进制规则

    如:parseInt('0xf',16); // 15

    parseFloat()

    不识别十六进制

    0xf——0

    如果识别表示为整数,则会返回整数 123abc——123 12.0——12

    String

    toString()

    undefined、null无此方法

    可传入参数控制转换进制

    var num=10; num.toString(2);// 1010 num.toString(16);// a

    String()

    规则如下

    如果值有toString()方法则返回相应结果null返回'null'undefined返回'undefined'

    Object

    constructor 构造函数

    hasOwnProperty()

    判断属性是否属于该实例中的属性

    isPrototypeOf()

    判断某原型是不是当前对象的原型

    propertyIsEnumerable()

    判断某属性是否可枚举

    toLocaleString()

    toString()

    valueOf()

    typeof操作

    numberstringbooleanobject 这个值是对象或者nullundefined 表示该值未定义、或者未初始化(变量被定义后未初始化,则默认值为undefined)function

    操作符(P36)

    布尔操作符算数操作符(乘、除、加、减) 需要注意±infinity、±0、NaN这三个的影响

    语句

    label

    配合break,continue来跳出、跳过指定循环

    out:for(var a in [1,2,3,4]){ for(var b in [1,2,3,4,5]){ if(a+b==6){ break out; } } }

    函数

    function(){}

    arguments可以取到所有传入函数内的参数 arguments[0]可通过下标取值arraylike,是一个类似数组的列表,不可枚举,需要转为数组

    第四章——变量、作用域和内存问题

    变量

    基本数据类型

    number、string、Boolean、null、undefined 五种

    引用数据类型

    object、date、array等

    复制两种不同类型的区别

    基本数据类型

    保存在数据栈中,复制相当于重新创建了一个变量

    所以,两个对象互不影响,相互独立

    var a = 1; var b = a; a = 2; console.log(b); // 1

    引用数据类型

    保存的变量值,实际上是一个指针,指向存储在堆中的一个对象。复制相当于复制了这个指针,而指向内存的对象并没有改变。

    所以,其中一个改变,复制的变量也会跟着改变

    var obj1 = new Object(); var obj2 = obj1; obj1.name='gem'; console.log(obj2.name); // gem

    传递参数

    所有函数中的参数都是按值传递的,如同复制一样。但是又不一样

    复制,有按值(基本数据类型),按引用(引用数据类型)两种

    但传参,只能按值

    基本数据类型,相当于在局部中又定义了局部变量。局部修改不影响外部

    function add(num){ num+=10; return num } var num=20; var result=add(num); console.log(num);// 20 console.log(result);// 30

    引用数据类型作为参数,参数依旧按照值的形式传递

    function add(obj){ obj.name='gem'; obj=new Object();// 局部变量的修改了引用到另一个堆中的对象,但对外部的obj的引用并不影响 obj.name='jin';// 所以是按值传递的 //如果是按引用传递,那么修改obj指向另一个对象时,函数外部的obj也应该一起改变 } var obj=new Object(); add(obj); console.log(obj.name);// gem

    引用数据类型的检测

    a instanceof b——a的原型是不是b,根据其原型链来识别

    当a不是引用数据类型(基本数据类型),则直接返回false,因为基本数据类型不是对象

    执行环境(作用域)

    全局执行环境(在web浏览器下,全局执行环境为window对象)

    每个函数拥有自己的执行环境

    作用域链(P73)

    自下向上搜索(由内至外)

    延长作用域

    try-catch语句的catch块with语句

    以下无块级作用域,与类c语言不同

    iffor

    声明变量

    通过var声明变量,会被自动添加到最近的环境中如果没有用var声明,则其会被添加到全局环境中

    垃圾回收

    标记清除

    通过标记变量的状态,来确定变量是否需要被销毁

    引用计数

    通过记录变量被拿去引用(赋值)给另外的变量的次数来确定是否需要销毁

    bug——两个值相互引用(循环引用)则无法被销毁,一直占用内存

    手动管理内存

    当一个变量被使用完成,并且后续不会再使用。则将其赋值为null,以便垃圾收集器将其回收


    2020年7月4日17:34:46

    有点后悔没早点看这本书,并且我认为我只看一遍还不够

    Processed: 0.009, SQL: 9