重学JavaScript的第0天

162 阅读4分钟

Ch1 什么是Javascript

JavaScript实现

完整的JavaScript实现包含以下几个部分:

  • 核心(ECMAScript):实现对JavaScript这门语言所有方面的规范描述,例如语法,关键字等
  • 文档对象模型(DOM)
  • 浏览器对象模型(BOM)

什么是DOM?

通俗理解可以把它想象成一棵树,这棵树将整个页面抽象成节点,让开发者可以随心所欲控制页面的内容和结构。以下代码就可以理解成如下图的分层节点。

<html> 
    <head> 
        <title>Sample Page</title> 
    </head> 
    <body> 
        <p> Hello World!</p> 
    </body> 
</html> 

dom.png

什么是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

\