zoukankan      html  css  js  c++  java
  • JS参考手册

    一、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、NaNun
    • 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() emove() oggle()contains()
    样式表
    • style元素
    • link元素
    • disabled属性开启和关闭样式表
    • d.styleSheets
    • disabled属性开启和关闭样式表
    • 属性值为只读类数组对象,包含CSSStyleSheets对象
    • cssRules[](标准API,包含所有规则,包括@指令)
    • rules[](IE,只包含样式表中实际存在的规则),元素为CSSRule对象
    • insertRule()deleteRule()
    • addRule() emoveRule()
    • 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

  • 相关阅读:
    SSH不超时
    python基本数据类型
    EF6.0批量插入
    AutoMapper的使用
    Json序列化,date类型转换后前端显示错误的解决方案
    Ajax跨域
    【转】C#多线程Lock使用
    Mongo集合操作Aggregate
    Json操作(DynamicJson)
    实用的VS工具
  • 原文地址:https://www.cnblogs.com/luanfujian/p/9340465.html
Copyright © 2011-2022 走看看