ECMAScript5(ES5)

来源:互联网 发布:编程开发是怎样的过程 编辑:程序博客网 时间:2024/06/10 17:37

ECMAScript5(ES5)

1支持ES5的浏览器

· Opera 11.60+;

· Internet Explorer 9+,IE9不支持严格模式

· Firefox 4+;

· Safari 5.1+;

· Chrome 13。

2加载事件

2.1 DOM文档加载步骤

1.解析HTML结构。

2.加载外部脚本和样式表文件。

3.解析并执行脚本代码。

4.DOM树构建完成。//DOMContentLoaded

5.加载图片等外部文件。

6.页面加载完毕。//window.onload。

2.2 document事件

下面两个事件用来取代window.onload事件。

2.2.1 readystatechange事件

· Interactive 相当于DOM文档加载步骤中的第4步。

· complete 相当于window.onloadDOM文档加载步骤中的第6步 。

document.onreadystatechange = function(){

if(document.readyState === 'interactive'){

 }

}

2.2.2 DOMContentLoaded事件(推荐)

document.addEventListener('DOMContentLoaded',function(){

    //DOM树构建完成后执行

})

3 ES5的严格模式

除了正常模式,ES5添加了第二种运行模式:严格模式(strict mode)”。顾名思义,这种模式使得javascript在更严格的条件下运行(更可靠,更安全)。目前,除了IE6-9,其它浏览器均已支持ES5严格模式。

3.1 为什么要用严格模式

· 消除javascript语法的一些不合理,不严谨的地方,减少一些怪异行为;

· 消除代码运行的一些不安全之处,保证代码运行的安全;

· 提高编译器效率,增加运行速度;

· 为未来新版本的javascript做好铺垫....

3.2如何使用严格模式

在头部写入 “use strict”。

· 全局:针对整个js文件
”use strict”放在脚本文件的第一行,则整个脚本都将以严格模式运行

· 局部:针对单个函数
”use strict”放在函数体的第一行,则整个函数以严格模式运行。

function strict(){

"use strict";

return "这是严格模式";

}

3.3 ES5严格模式执行限制

· 不使用var声明变量严格模式中将不通过

· 删除系统内置的属性会报错

· delete不可删除属性的对象时报错,如:var声明的全局变量(会自动称为window的属性)

· 对象有重名的属性将报错:var obj={name:"小王",name:'王大锤'}

· 函数有重名的参数将报错:function sum(a,a,b){}。

· arguments严格定义为参数

不允许对arguments赋值

禁止使用arguments.callee。

· 函数必须声明在顶层,不能写在条件判断语句或for循环语句中

var arr = [10,2,3,50];

if(arr.length>3){

function sum(){//报错

}

}

4 JSON对象方法

4.1 JSON.parse(text)

json字符串转换成对象/数组

· textjson字符串

· json字符串格式

· json字符串的值可以为以下值

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true false

数组(在方括号中)

对象(在花括号中)

Null。

4.2 JSON.stringify(value)

将数组/对象转换成标准的json字符串

5 ES5新增获取元素节点的方法

5.1 querySelector(css选择器)

获取匹配选择器的第一个元素节点,返回DOM节点

5.2 querySelectorAll(css选择器)

获取匹配选择器的所有元素,返回数组

案例:

Html结构

<div class="datalist">

<ul>

<li>

<img src="" alt="">

<h4>1</h4>

<p class="price"></p>

</li>

<li>

<img src="" alt="">

<h4>2</h4>

<p class="price"></p>

</li>

</ul>

</div>

<div class="datalist">2</div>

Js代码:

document.addEventListener('DOMContentLoaded',function(){

var datalist = document.querySelector('.datalist');

//css中的选择器一样,通过类名选择,返回值为DOM节点

var lis = datalist.querySelectorAll('li');

//返回值为标签为li的节点的数组

// 第二个

var secLi = datalist.querySelectorAll('li:nth-child(2)');

//虽然只有匹配到一个节点,但返回值仍为数组,数组元素只有1

var h4 = datalist.querySelectorAll('h4');

var p = document.querySelectorAll('.datalist p');

})

6 Function方法

6.1 bind()

用于将当前函数和指定对象绑定,返回一个新的函数

案例:点击按钮事件,延迟1S执行相应函数。

var btns = document.querySelectorAll('.btn');

for(var i=0;i<btns.length;i++){

    btns[i].onclick = function(){

        //这里的this指向按钮

        setTimeout(function(){

            // 这里的this呢?

            console.log(this);

            output.innerHTML = '你点击了' + this.innerHTML;

        }.bind(this),1000);

    };

}

7 获取class列表属性和data自定义属性

7.1获取class列表属性

classListjs的方法:

1.length : class类名的个数

2.add() : 添加class方法

3.remove() : 删除class方法

4.toggle() : 切换class方法

5.contains():是否含有某个类,返回布尔值

案例:

var box = document.querySelector('.box');

var btn = document.querySelector('#btn');

// 鼠标移入添加一个active

box.onmouseover = function(){

this.classList.add('active');

}

//鼠标移出删除掉一个active

box.onmouseout = function(){

this.classList.remove('active');

}

//toggle意思为开关,如果有则移出类名active,没有则添加类名active

btn.onclick = function(){

box.classList.toggle('hide');

}

7.2data自定义属性

dataset

data-name :  dataset.name

data-name-first  :  dataset.nameFirst

案例:

Html结构:

<button id="btn" data-msg="实现显示隐藏的功能" data-name="超强按钮" data-src="img/xx.jpg" data-first-name="xie">显示隐藏</button>

Js代码:

console.log(btn.dataset.firstName) ; //xie

原创粉丝点击