包含:第一章到第四章
说两句:用块引用就是图好看XD
JavaScript是一门用来与网页交互的脚本语言,包含一下三个部分
ECMAScript:核心,提供核心功能
DOM:提供与网页内容交互的方法和接口,把HTML内容抽象为分层节点
BOM:提供与浏览器交互的方法和接口,控制浏览器窗口与本身
第一章小结如上,本章介绍背景,下面是<script>专题
正常下,浏览器必须解释完<script>的代码,然后继续渲染页面的剩余部分 放在末尾
想要推迟执行的脚本,使用defer属性
想要脚本执行不需要等待,使用async属性
如果浏览器不支持<script>内显示的内容,考虑<noscript>
第二章中动态加载脚本较有意思,但感觉不常用。通过向DOM中动态添加script元素,定义好script的属性,再用DOM加载即可。
同时回顾了退出历史舞台的XHTML,而下面是新时代的ES(雾
语法
1.区分大小写
2.标识符采用驼峰命名
3.语句尾尽量还是带分号,可以提升性能,减少解析器的麻烦事
4.使用var,let,const定义变量,当然部分编译器给省了,但尽量还是带着
5.关于var,作用域为一个函数,存在声明提升现象,即会首先把变量声明拉到作用域顶部。同时,全局声明会成为window对象的属性。同时,在循环逻辑中,被定义为迭代变量会渗透到循环体外部
6.关于let,作用域为一个块,不存在声明提升现象,全局声明不会成为window对象属性,不会渗透到循环体外层,但在成为迭代循环的时候,会生成一个新的迭代变量
7.关于const,与let类似,不过需要定义时初始化,同时不能再次被修改,当然限制氛围仅为所指向的引用,如是对象,改对象的内部属性就没事
第三章的第一个部分语法,讲了基本写作规范。对了,记得const优先,let其次,少用var
数据类型
1.原始类型
Undefined(没有初始化,判断中相当于False),Null(可以给对象属性初始化,用来判断),
Boolean(这里不等于数值),Number(Infinity表示无穷大),
String(通常字符字面量带\,一经创建不可改变,可以用 ` 建立模板字符串,可以用${ }插值),Symbol(暂未用到,还特别绕)
对于Number,有如下方法
isNaN(),isFinity()判断是否为不是数值和有限大
parseInt(),parseFloat()转化字符串
对于String,有如下方法
toString()转变为字符串
String.raw()获得原始字符串
2.对象Object
创建对象实例let o = new Object()
每个实例都有如下属性和方法
constructor创建当前对象的函数,isPrototypeOf判断对象是否未原型
hasOwnProperty方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性
toString()返回对象的字符串表示,valueOf()返回对象对应的字符串,数值,布尔值表示
第三章的第二部分数据类型,重点String学了很多新知识,模板字符串,插值,转化什么的。
还有剩余操作符这样的神奇操作。
流控制语句
1.操作符
++a,在同一语句取值a+1,后a+1
a++,在同一语句取值a,后a+1
a**b,即为a^b
==会转化类型比较
===不转化类型
2.语句
if,dowhile,while,for,forin(遍历非符号的元素),forof(遍历可迭代对象),标签语句(见下) ,with语句(见下),switch语句
第一部分的位操作符没有总结,因为内容太多不常用,可随时搜到。特别注意的是,标签语句,类似于goto,用法如下。
loop1:
for (let i = 0; i < 5; i++) {
if (i === 1) {
continue loop1;
}
str = str + i;
}
还有with语句,可以偷懒少打对象,用法如下
with(location) {
let qs = search.substring(1);
let hostName = hostname;
let url = href;
}
//这里with语句用于连接location对象,变量首先会被认为是局部变量,如果没有发现,
//就会搜索location对象,并被求值为location对象的属性
第三章小结,本章介绍了语法,变量,数据类型,操作符,语句,函数。相对于俺这个之前接触JAVASE与C/C++的小菜鸡来说,印象深刻的新内容为:先用const然后let少用var,` `模板字符串,Symbol符号类型(不会),**为指数运算,标签语句与with语句。
JavaScript变量是松散类型的,而且变量不过就是特定时间点的一个特定值的名称而已
原始值与引用值
1.原始值就是那六种原始类型,按值访问,复制后,产生两个变量
2.引用值是多个值构成的对象,按引用访问,复制后,两个对象指向一个位置
3.传递函数参数的时候,无论何种类型都是传值,就像复制过去一样
4.确定类型时,通过typeof确定原始类型,通过instanceof确定对象类型
第四章的第一部分,出现的注意很是注意:在很多语言中,字符串时使用对象表示的,因此被认为引用类型,而ECMAScript打破了这个惯例。
执行上下文和作用域
1.上下文是个概念,它存在一个变量对象,一个上下文中定义的所有变量和函数都存在于这个对象上。上下文在其所有代码执行完毕后销毁。全局上下文是最外层的上下文。
在浏览器中,window对象为全局上下文,因此通过var定义的全局变量和函数都会成为window对象的属性和方法。
上下文代码在执行时,会创建该能量对象的一个作用域链,决定各级上下问代码顺序。
2.注意,使用with语句和trycatch语句时候,可以提升一个上下文等级
第四章的第二部分,后面还是let,const,var的用法回顾与总结,感觉有点重了,这得实践出真知。
理解垃圾回收
1.JS的垃圾回收通过自动内存管理实现,两种方式标记清理和引用计数
2.标记清理:标记某个变量,反复标记和抹除,最终把有标记的删除
3.引用清理:声明变量引用数为1,赋值加1,被覆盖了减1,为0时被删除
第四章的第三部分,理解嘛,理解就好,所以后面的内容也鸽了。引用标记不如标记清理有效。
小结一下第四章,令人深刻的有原始值和引用值的区别,在传函数值的时候都是传值,上下文执行方式,解除变量的引用可以消除循环引用XX=null。
小结一下小结
先讲了JS的基本组成:ECMAScript、DOM、BOM与HTML如何结合JS。
后说了ECMAScript的基本语法,变量的声明,语句的书写,流程的控制。
最后说了一下,程序编译的时候的流程,引用值和原始值,上下文的执行,垃圾回收。