一、JavaScript Core API

词法结构

字符集

使用Unicode字符集

注释

单行注释

//或HTML风格的<!--

多行注释

/**/

标识符

大小写

区分大小写

空格、换行、格式控制

转义序列

字面值、类型、变量、常量

字面值

类型(字面值或量的类型)

类型种类

原始类型    
  • 无符号16位序列(utf-16,内码)
  • ES3中必须一行,ES5可以多行,行后加\
  • 单双引号交叉同用
  • 转义字符
 
  • 所有数字均为IEEE 754 64位浮点数
  • 整数:十进制\十六进制0x、0X\八进制0
  • 小数:普通表示法\指数表示法
 
u
  • 变量未初始化为u
  • 对象属性或数组元素不存在
  • 函数默认返回u(如果函数没有显式返回)
  • 函数形参为u
  • 预定义的全局变量,非关键字
  • typeof返回undefined
  • 系统级、出乎意料或类似错误的值得空缺
 
n
  • 关键字
  • typeof返回object
  • 正常、意料之中或正常的值的空缺
 
引用类型 数组    
对象    
     

类型转换

布-->其它  
  • 符:toString()
  • 整数
  • 小数
  • u
  • n
  • 数组
  • 对象
其它-->布 隐式转换(系统默认)
  • falsy value:false\""(空字符串)\0、-0、NaN\un
  • truthy value:除上面外全转换成true
  显示转换(强制转换)  
符-->其它    
  其它-->符    

变量

常量

表达式

语句

二、Web浏览器API(客户端API)

Web浏览器中JS的运行

引入(四种方式)

内联(执行一次)

script元素属性表:

属性及默认值 说明 备注
language="javascript" 老式浏览器代替type,已废弃  
type="text/javascript" 脚本的MIME类型

当包含不被浏览器识别的type属性值时,

  • 在内联下:会解析这个元素但不会显示或执行其中内容,可使用script元素的HTMLElement的text属性读取。
  • 在外部下:src指定的文件不会被下载,会忽略该脚本
src="url" .js文件URL  
defer 延迟执行
  • 布尔属性,插入script标签即可
  • 存在兼容性,H5中必须联合src使用才有效
  • 当defer和async同时存在,且浏览器均支持,则会支持async,忽略defer
  • 延迟脚本执行,直到文档载入、解析、可操作。
  • 多个延迟脚本按照在文档出现顺序执行
async 异步执行
  • 布尔属性,插入script标签即可,
  • 存在兼容性,H5中必须联合src使用才有效
  • 当defer和async同时存在,且浏览器均支持,则会支持async,忽略defer
  • 异步脚本执行,尽快执行脚本,避免下载脚本阻塞解析。(如100M的脚本可以先异步执行而不必先下载完成)
  • 多个异步脚本载入后执行,意味着可能无序执行

XHTML中,“<”,“&”会解释成xml,可用CDATA包围:<![CDATA[ //JS code ]]>。

外部(执行一次)

使用src后,script标签的之间的内容会被忽略。

事件属性(执行多次)

  • 属性值包含多条语句,以;分割,构成一个函数体。
  • 单行注释不可用。

URL资源(执行多次)

  • <a href="javascript:" />
  • <form action="javascript:" />
  • window.open()方法的参数
  • 超链接里的URL(bookmarklet
  • 单行注释不可用

javascript:url执行后会将返回值覆盖当前文档,可以:

  • void操作符强制函数调用或
  • 给表达式赋予undefined

避免覆盖

执行(单线程模型,无并发,脚本和事件处理程序同一时间只能执行一个)

同步执行阶段(脚本执行阶段)

  1. 默认执行方式(内联和外部脚本默认情况下同步阻塞执行,阻塞文档解析和渲染)
  2. 可改变的执行方式:
  • defer延迟脚本
  • async异步脚本
  • 动态创建script标签插入文档实现异步载入和执行。

异步执行阶段(事件处理阶段,事件驱动)

第一个事件:onload事件

执行时间线

  1. document.readystate="loading"阶段。web浏览器创建Document对象,解析web页面,解析HTML元素和文本内容添加Element对象和Text节点到文档中。

    • 无async和defer的script元素时:
    • 暂停解析(暂停解析文档,将元素添加入文档并同步执行,下载和执行时解析器会暂停解析。)
    • 可以使用document.write()方法将文本插入输入流。解析器恢复时,这些文本成为文档的一部分。
    • 可以访问自身的script元素及之前的文档内容。
    • 含async的script元素时:
    • 继续解析(继续解析文档,同时异步下载脚本文本并尽快执行)
    • 禁止使用documnet.write()方法。
    • 可能也不可能(取决于尽快的程度)访问自身的script元素及之前的文档内容。
    • 含defer的script元素时:
    • 继续解析,暂停脚本执行直到文档完成解析。
  2. 解析文档完成后,document.readystate="interactive"。
    • 由于文档解析完成,含defer的script元素顺序执行
    • 禁止使用document.write()方法
    • 可以访问完整文档树
  3. 浏览器在Document上触发DOMContentLoaded事件。此时异步脚本可能没有执行。
  4. 载入图片,执行未执行的异步脚本后,document.readystate="complete",然后web浏览器会触发window的load事件。

Web浏览器中JS的兼容性、安全性、可访问性

兼容性

兼容性的原因(演化、未实现、Bug)

兼容性的解决

  • 类库
  • 分级支持
  • 功能测试
  • 浏览器测试
  • 怪异模式和标准模式
  • IE条件注释

HTML中的条件注释

单独的条件前后缀 <!--[if !|lt|gt|lte|gte IE|IE 5|IE 6|IE 7|IE 8|IE 9]> IE5~IE9能识别前后缀并解释渲染内容 其他浏览器不能识别前后缀仅当做注释 <![endif]--> 注释的条件前后缀 <!--[if !|lt|gt|lte|gte IE|IE 5|IE 6|IE 7|IE 8|IE 9]>-->(或<---->) IE5~IE9能识别前后缀但同时将里面的内容当做注释并不展示 其他浏览器不能识别前后缀仅当做注释,但此时前后缀也被注释掉,所以可以识别里面的内容。 <!--(或<!---->)<![endif]-->

JS中的条件注释(IE的js解释器支持条件注释)

/*@cc_on
@if(@_jscript)
@else
 @end
@*/

安全性

同源策略

不严格同源策略

  • Document对象的domain属性
  • CORS跨域资源共享
  • CDM跨文档消息

IE的Active控件和非IE的插件

XSS跨站脚本

拒绝服务攻击

可访问性(JS增强信息访问,WAI-ARIA)

BOM(宿主API)

Window

属性

     普通属性

事件属性

方法

DOM(宿主下文档API)

Document对象

属性

方法

节点树的操作(增删改查)

元素节点的操作

查(访问)

遍历方式
节点属性
  • nodeType
  • nodeName
  • nodeValue
     
根节点
  • document.documentElement
     
子节点
  • hasChildNodes()
  • childNodes/children
  • firstChild/firstElementChild
  • lastChild/lasrElementChild
  • childElementCount
     
父节点
  • parentNode
     
兄弟节点
  • previousSibling/previousElementSibling
  • nextSibling/nextElementSibling
     
快捷方式
属性 id document.getElementById()  Element对象 IE8以下,该方法入参不区分大小写,且返回匹配的name属性的元素
name document.getElementsByName()  NodeList对象(包含若干Element对象的数组)
  • IE中该方法也返回匹配的id属性的元素
  • 定义在HTMLDocument类中,不在Document类中,故在HTML文档可用,XML文档中不可用
  • 为HTML元素设置id后,自动为window对象创建对应属性
  • 为<form>\<img>\<applet>\<embed>\<object>\<iframe>设置name后,自动为Document对象创建对应属性(其中<iframe>指代window对象)
class document.getElementsByClassName()    
元素 Tag document.getElementsByTagName()    
CSS选择器 Selector document.querySelector()    
document.querySelectorAll()    
document.all        

创建

元素节点 document.createElement('element')/document.createElementNS('url','element')(在使用了XML命名空间的文档中,同时指定命名空间的url和标签名)    
文本节点 document.createTextNode('text node content')    
注释节点 document.createComment()    
文档碎片 document.createDocumentFragment()   DocumentFragment和Document一样独立不属于文档一部分,且把一组节点当中一个节点
克隆节点 Node.cloneNode(true|false)(true:深拷贝|false:浅拷贝)    
导入节点 document.importNode(node,true|false)(true:深拷贝|false:浅拷贝)   除IE外

插入节点

  • appendChild()
  • insertBefore()
  • Node.appendChild(newNode)
  • Node.insertBefore(newNode,exitNode)(若exitNode参数为null,等于apendChild()方法,相当于在最后一个插入)
  若插入已存在的节点,则会删除已存在重新插入

删除和替换节点

  • Node.removeChild(exitNode)
  • Node.replaceChild(newNode,exitNode)
     

属性节点的操作

Node节点属性 Node.attributes[index|name]
  • 非Element的任何节点属性值为null
  • Element的节点属性值为实时只读类数组
  • 实时只读类数组索引后返回的是特殊的属性节点Attr对象
  • Attr对象可访问name和value
标准属性
  • Element.property
  • HTMLElement定义了通用的属性(id、lang、dir)及事件属性
  • 特定的Element子类型定义各自的属性
  • 驼峰命名法,保留字属性采用前缀HTML(htmlFor),class变为className
  • 字符串、布尔、数值属性值为字符串、布尔、数值
  • 事件属性值为Function对象(或null)
  • style属性值为CSSStyleDeclaration对象
非标准属性
  • Element.getAttribute('property')
  • Element.setAttribute('property','value')
  • Element.hasAttribute()
  • Element.removeAttribute('property')
  • 属性值返回字符串
  • 保留字属性不转换
  • 布尔属性可用hasAttribute()判断
  • 四个方法的命名空间版本加后缀NS
数据集属性
  • Element.dataset
  • dataset属性指代一个对象,该对象的各个属性值为去掉data-前缀且驼峰表示后的属性值

文本节点的操作

Node节点文本 Node.nodeValue  
Node.data  
纯文本 Node.textContent 除IE外都支持
Element.innerText 除FF外都支持
document.getElementsByTagName('script')[0].text(script元素text属性)  
HTML文本 document./element.innerHtml 单独设置时效率高,使用+=拼接效率低,因为既要序列化又要解析
element.outerHtml 除FF外都支持
element.insertAdjacentHTML('beforebegin|afterbegin|beforeend|afterend','element')  

CSSOM(宿主下文档样式API)

内联样式

style

  • e.style.property
  • (将样式作为对象的属性)
  • 只返回内联样式,对于元素真正应用的样式(计算样式)无能为力
  • e.style返回CSSStyleDeclaration对象
  • CSSStyleDeclaration对象的属性名字为驼峰命名并且保留字属性加前缀
  • 数值属性加单位
  • 复合属性有对应
  • e.style.cssText
  • e.getAttribute('style')
  • e.setAttrbute('style','value')
  • (将样式作为单个的字符串)

计算样式

getComputedStyle()

  • window.getComputedStyle(e,null|''|':before(css伪对象字符串)')
  • IE8及以下不支持
  • 返回CSSSstyleDeclaration对象
  • 只读
  • 其cssText属性为未定义
  • 百分比、pt属性值返回绝对值,颜色属性转换rgb(a)
  • 不计算复合属性,只计算基础属性
  • e.currentStyle
  • IE中每个e都有自己的currentStyle属性
  • 百分比、pt属性值返回相对值,颜色属性不转换rgb(a)
class类
  • e.className
 
  • e.classList
  • H5中定义
  • 属性值为实时只读类数组对象DOMTokenList
  • DOMTokenList的方法add()\remove()\toggle()\contains()
样式表
  • style元素
  • link元素
  • disabled属性开启和关闭样式表
  • d.styleSheets
  • disabled属性开启和关闭样式表
  • 属性值为只读类数组对象,包含CSSStyleSheets对象
  • cssRules[](标准API,包含所有规则,包括@指令)
  • rules[](IE,只包含样式表中实际存在的规则),元素为CSSRule对象
  • insertRule()\deleteRule()
  • addRule()\removeRule()
  • DOM创建style,设置innerHtml
  • d.createStyleSheet(),设置cssText属性
 

事件

异步事件驱动模型

事件类型

事件目标

事件处理程序

注册

属性注册 元素属性注册
  • on-
如果事件目标为window则注册在body元素的属性上
JavaScript对象属性注册
  • Object.on-
只能注册一个属性
方法注册

非IE,标准API

  • addEventListener('type',function,boolear)
  • removeEventListener('type',function,boolear)
  • 第三个参数默认false,可省略,当为true注册为捕获型事件处理程序
  • 事件类型参数type不带前缀on-
  • 允许注册多个不同的事件处理程序函数的事件,但不允许注册多个相同事件处理程序函数的事件

IE9以下

  • attachEvent('type',function)
  • detachEvent('type',function)
  • 不支持事件捕获,只有两个参数
  • 事件类型参数type为带前缀的on-
  • 允许相同的事件处理程序函数注册多次

调用

参数
  • event
  • IE8及以前中window.event
运行环境
  • addEventListener()中this指代事件目标
  • attachEvent()中this指代window
作用域
  • HTML属性注册的事件处理函数被转换为能存取全局变量的顶级函数,而非本地变量
返回值

对属性注册的处理程序

  • 返回false取消默认操作
  • onbeforeunload事件处理程序返回字符串,将出现在提示框

对通过方法注册的处理程序

  • preventDefault()
  • 设置returnValue属性
调用顺序
  • 属性注册优先
  • addEventListener()方法注册的按注册顺序调用
  • attachEvent()方法注册的不保证按注册顺序调用

事件对象

事件传播

HTML5相关API

JS参考手册的更多相关文章

  1. JS 参考手册

    JS 参考手册 JavaScript 对象 HTML DOM 对象

  2. Gulp.js 参考手册,自动化构建利器

    Gulp 是最新的基于 Node 的自动化构建工具,希望能够取代 Grunt,成为最流行的 JavaScript 任务运行器.通过结合 NodeJS 的数据流的能力,只需几步就能搭建起自己的自动化项目 ...

  3. Vue.js 2.0 参考手册.CHM下载

    下载地址 Vue.js 2.0 参考手册.CHM下载链接: http://pan.baidu.com/s/1kVbhd4b 密码: wxfh

  4. HTML 内嵌JS脚本、相关参考手册

    提供一个JS.HTML参考手册入口:http://www.w3school.com.cn/jsref/index.asp. JavaScript 最常用于图片操作.表单数据处理以及内容动态更新. &l ...

  5. 浏览器端-W3School:JS & DOM 参考手册

    ylbtech-浏览器端-W3School:JS & DOM 参考手册 1.返回顶部 1. JavaScript 参考手册 本部分提供完整的 JavaScript 参考手册: JavaScri ...

  6. vue.js学习参考手册

    参考手册 示例:www.51siyuan.cn/161.html

  7. jQuery 1.10.3 参考手册

    Jquery是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7 ...

  8. [转] Mongoose 参考手册

    Mongoose 参考手册 标签(空格分隔): MongoDB Mongoose 是什么? 一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据 ...

  9. dubbo 官方参考手册~备案(防止哪天阿里一生气把dubbo给删除了)

          首页  ||  下载  ||  用户指南  ||  开发者指南  ||  管理员指南  ||  培训文档  ||  常见问题解答  ||  发布记录  ||  发展路线  ||  社区 E ...

随机推荐

  1. ubuntu16下面 redis 无法链接到客户端问题

    1.今天从github上面下载了一个项目,链接到自己的tomcat里面的redis,结果在虚拟机里面可以链接成功,但是在客户端总是提示链接失败.google之后,原来是 因为 需要在redis里面设置 ...

  2. 关于Unity3d的Quaternion.Slerp的学习

    首先在场景中创建三个cube的GameObject,from表示要转换之前的样子,to表示转换之后的样子,change表示转的效果.如下图所示: 其中from和change cube开始运行之前的tr ...

  3. 重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件

    重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件 为什么会需要这样子的一种方法来实现隐藏或者显示一个cell中的某些控件呢? 其实,隐藏cell中某 ...

  4. exchange 普通用户可以创建通讯组

    运维发现,通讯组多了好多未知名称的,经查为普通用户通过owa新建的,怎么阻止用户新建通讯组呢. 在搭建exchange后,系统会自动创建一个“Default Role Assignment Polic ...

  5. ISA 连接非443端口的https站点提示错误

    ISA 连接非443端口的https站点提示错误:12204 The specified Secure Sockets Layer (SSL) port is not allowed. ISA Ser ...

  6. LAMP配置NFS页面共享,autofs实现挂载,DNS实现名称解析,纯手动操作

    0.实验架构: 共6台服务器 分工如下: 服务器 职责 IP地址 Centos版本 描述 A DNS 172.18.7.70 7 B Apache 172.18.7.71 7 httpd+php-fp ...

  7. Pip批量安装/卸载包

    pip批量安装package 将需要安装的包保存在requirements.txt中 cd到aa.txt所在目录,运行: pip install -r requirements.txt pip批量卸载 ...

  8. Xcode中模拟器慢

    取消下图中框框打勾

  9. pip 升级 Appium-Python-Client

    第一种方法: pip install --upgrade Appium-Python-Client 如果出现权限提醒: sudo -H pip install --upgrade Appium-Pyt ...

  10. TCP/IP 协议图--传输层中的 TCP 和 UDP

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP. TCP 是面向连接的.可靠的流协议.流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但 ...