Ch1 什么是Javascript
JavaScript实现
完整的JavaScript实现包含以下几个部分:
- 核心(ECMAScript):实现对JavaScript这门语言所有方面的规范描述,例如语法,关键字等
- 文档对象模型(DOM)
- 浏览器对象模型(BOM)
什么是DOM?
通俗理解可以把它想象成一棵树,这棵树将整个页面抽象成节点,让开发者可以随心所欲控制页面的内容和结构。以下代码就可以理解成如下图的分层节点。
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<p> Hello World!</p>
</body>
</html>
什么是BOM?
浏览器对象模型(BOM)用于支持访问和操作浏览器的窗口。使用 BOM,开发者可以操控浏览器显示页面之外的部分。BOM主要针对的是浏览器窗口和子窗口(frame),例如以下扩展:
- 弹出新浏览器窗口的能力
- 移动、缩放和关闭浏览器窗口的能力
- navigator对象
- location对象
- screen对象
- performance对象
- ...
总结
JavaScript 的这三个部分得到了五大 Web 浏览器(IE、Firefox、Chrome、Safari 和 Opera)不同程度的支持。所有浏览器基本上对 ES5(ECMAScript 5)提供了完善的支持,而对 ES6(ECMAScript 6)和 ES7(ECMAScript 7)的支持度也在不断提升。
Ch2 HTML中的JS
HTML中的JS
在HTML中引用js代码常见的方法就是使用script标签,在使用的时候有以下几点需要注意:
- 在浏览器加载HTML过程中,HTML 解析器运行于主线程之中,并且在遇到 script 标签后会被阻塞,直到脚本从网络中被获取和执行。也就是说 script 标签中的脚本会阻塞浏览器的渲染。
-
常用属性:
- async:可选,表示应该立即开始(异步)下载脚本,同时不影响加载和渲染文档元素等操作,脚本下载完成后立即执行脚本。脚本执行的过程中,文档将停止解析,直到脚本执行完毕才继续解析。
- defer:可选,表示脚本可以延迟到文档完全被解析和显示之后在执行相应脚本,只对外部脚本文件有效。
- integrity:可选。允许比对接收到的资源和指定的加密签名以验证子资源完整性(SRI, Subresource Integrity)。如果接收到的资源的签名与这个属性指定的签名不匹配,则页面会报错, 脚本不会执行。这个属性可以用于确保内容分发网络(CDN,Content Delivery Network)不会提 供恶意内容。
-
script 标签中如果有了src属性,标签内部则不应该有js代码,如果有内部有js代码也只会被忽略。
-
通过使用 noscript 标签,可以指定在浏览器不支持脚本时显示的内容。如果浏览器支持并启用脚本,则 noscript 标签 中的任何内容都不会被渲染。
Ch3 语言基础
-
js中区分大小写
-
标识符:
- 标识符第一个字符必须是 字母,下划线 或者是 美元符号,剩余字符可以是上面三者或是数字
- 按照惯例,标识符用驼峰大小写形式: 如 doSomethingImportant
- 不能用关键字和保留字作为标识符
-
变量:
-
var关键字:
- var具有函数作用域,如果不使用闭包等操作,在函数执行完,var生命的变量会被销毁
- var具有变量提升
-
let关键字:
- 跟var差不多,但是具有块级作用域
- var可以在块内部重复声明,但let不行
- let没有变量提升,会出现暂时性死区,即在let声明之前不能以任何方式来访问未声明的变量
-
const关键字:
- 跟let差不多
- 对于值类型的声明,const一旦声明就不能改变变量的值
- 对于引用类型的声明,const声明之后还是可以改变内部的值
-
声明风格:
- 拒绝var
- const 优先于 let
-
-
数据类型:
-
原始类型(6个):Undefined,Null,Boolean,Number,String,Symbol
-
复杂数据类型:Object(一切引用类型的根对象)
-
typeof操作符:判断变量的数据类型,返回一个字符串
-
Undefined类型:
- 当使用var 或者 let 声明了变量但没有初始化,那么变量的初始值就是undefined
- 永远不用显示的给某个变量设置undefined值
-
Null类型:
- null值表示一个空对象指针,typeof null 返回的是object
- 在定义对象的时候,如果一开始不赋初值,建议用null来初始化
- null == undefined 返回 true
-
Symbol类型:
- ES6新增,用途是确保对象属性使用唯一标识符
- 之后单独写一篇博客关于Symbol
-
Object类型:
- 之后单独写一遍博客关于Object
-
\