JavaScript
一、javaScript是一门用来跟网页交互的脚本语言
包含三部分
ECMAscript(核心):从语法、类型、语句、关键字、保留字、操作符、全局对象等对语言的规范描述。
es6 是2015年就出了的
文档对象模型(DOM):将网页抽象成一组分层节点,使用DOM api可以对网页进行增删改查。 W3C制定DOM标准
浏览器对象模型(BOM):使用BOM api可以操作和访问浏览器的窗口。
二、HTML中的JavaScript
2.1、<script> 的8个属性
async: 仅对外部脚本文件有效
charset: 时常被忽略
crossorigin: crossorigin="anoymous"表示不必设置凭据标志,如果是“use-credentials"则需要设置凭据。
defer: 可选,延迟到文本完全被解析和显示之后再执行。仅对外部文件脚本文件有效
integrity:验证接收到的资源和指定的加密签名,不匹配,页面报错且脚本不执行。可以避免恶意内容
langauge:废弃
src: 执行代码的外部文件。
type: 脚本语言的内容类型。MIME 一般是”text/javascript", javaScript文件的MIME类型通常是“application/x-javascript”
2.2、注意事项
使用了src的<script>不应再在<script>和</script>中包含其他JavaScript代码,都提供,也只会执行外部脚本文件。
同源策略限制:get请求获取外部脚本文件不受该限制,但返回并被执行的javascript则受限制。
不带defer和async属性的<script>严格按顺序依次执行。
2.3、杂项
a. <script>元素一般是在<html><head></head><body><script></script></body></html> body标签里。
b. <script defer src="exmaple.js"></script> 多个defer 推迟的脚本不一定总会按顺序执行或者在DOMContentLoaded事件之前执行。建议只保留一个这样的脚本
c. <script async src="exmaple.js"></script> 不必等脚本下载或者执行完再加载页面,异步脚本不应在加载期间修改DOM。
d. 动态加载脚本
let script = document.createElement("script");
script.src = "xxx.js"
document.head.appendChild(script);
一般来说这种是异步加载的,async,但是有些浏览器不支持,所以可以明确将其改成非async(script.async = false;)
这种对浏览器预加载器是不可见的,会影响性能,所以我们让他知晓,可以文档显式声明。
<link rel="preload" href="xxx.js">
e. 文档模式
BackCompat就是混杂模式或者怪异模式,浏览器按照自己的方式解析html。
CSS1Compat就是含有的模式,标准模式解析。
f. <noscript>元素
不支持javascript脚本的早期浏览器或者浏览器的脚本支持被关闭时可以使用。