ES5的相关

严格模式(usestrict)是JavaScript中的一种模式,要求在代码开头声明,用于规范变量声明、禁止形参重名和改变函数中this的行为。启用严格模式能提升代码规范性,避免一些潜在错误,并可能提高运行效率。

一.严格模式:

"use strict";

使用说明:

  1. 要放在代码的最前面,也就是在script标签中的第一行或者某个函数中的第一行,否则会失效

  2. 严格模式可以规范当前script标签或者当前函数中的代码,不能规范别的script标签中的代码和别的函数

1.3、作用

  1. 不允许隐式声明变量

  2. 禁止函数中的形参重名

  3. 禁止函数中的this代表window

1.4、好处

  1. 可以让代码更加规范

  2. 可以让代码运行起来更快,提高运行效率

04-01
<think>好的,用户想了解ES5的特性和用法。首先,我需要回忆ES5的发布时间,应该是2009年。然后,ES5的主要特性有哪些呢?比如严格模式、JSON支持、数组方法新增等。 首先,严格模式,这个我记得是通过"use strict"来启用的,可以消除一些不严谨的语法,提高代码安全性。比如变量必须声明,不能删除不可删除的属性等。需要具体例子说明。 然后是JSON对象的方法,parse和stringify,ES5之前可能需要引入库来处理,现在原生支持了。这部分用户可能比较熟悉,但需要详细说明用法。 接下来是数组的新增方法,比如forEach、map、filter、reduce等。这些方法在ES5中引入,极大地方便了数组操作。比如可以用arr.forEach(function(item) { ... })来遍历数组,或者用filter来筛选元素。 还有Object的方法,比如Object.defineProperty,允许定义属性的特性,如可写性、可枚举性等。这个在实现数据绑定或响应式系统中很常用。比如Vue.js就用了这个来实现数据劫持。 另外,函数绑定方法Function.prototype.bind,用于绑定this的指向。这个在回调函数中特别有用,避免this丢失的问题。比如var boundFunc = func.bind(context)。 还要考虑ES5的其他特性,比如字符串的trim方法,日期相关的改进,以及属性描述符相关的方法如Object.keys,Object.getOwnPropertyDescriptor等。 需要检查引用内容是否有相关支持。用户提供的引用中提到了ES6的class语法糖,ES8的async/await等,但ES5可能不在这些引用里。不过引用[4]提到了ES6及之后的版本,可能用户需要对比ES5和后续版本的差异。 可能用户的实际需求是在维护旧项目,或者想了解JavaScript的基础特性。需要确保回答结构清晰,分点列出特性,每个特性有例子和用法说明。 还要注意用户可能对ES5的兼容性感兴趣,比如哪些浏览器支持ES5,但考虑到现在主流环境都支持,可能不需要深入,但可以简单提及。 最后,生成相关问题,比如ES5ES6的区别,严格模式的作用,如何用ES5实现继承等。这些问题可以帮助用户进一步学习。 需要确保回答符合格式要求,使用中文,正确使用LaTeX,行内公式用$,独立公式用$$。不过ES5的特性可能较少涉及数学公式,但如果有的话要注意格式。 总结回答结构:引言,主要特性分点说明,每个特性包括描述、示例代码,最后相关问题。</think>### ECMAScript 5 特性及用法 ECMAScript 5ES5)是2009年发布的JavaScript语言标准,引入了多项重要特性,提升了开发效率和代码可靠性。以下是其核心功能及示例: --- #### 1. **严格模式(Strict Mode)** 通过添加 `"use strict";` 启用,消除不严谨语法,增强安全性: ```javascript "use strict"; x = 10; // 报错:变量未声明 delete Object.prototype; // 报错:不可删除属性 ``` --- #### 2. **JSON 原生支持** 新增 `JSON.parse()` 和 `JSON.stringify()` 方法,简化数据解析与序列化: ```javascript const jsonStr = '{"name": "Alice", "age": 25}'; const obj = JSON.parse(jsonStr); // 解析为对象 const str = JSON.stringify(obj); // 转换回JSON字符串 ``` --- #### 3. **数组方法增强** 引入 `forEach`、`map`、`filter`、`reduce` 等函数式方法: ```javascript const numbers = [1, 2, 3]; numbers.forEach(item => console.log(item)); // 遍历 const doubled = numbers.map(x => x * 2); // [2,4,6] const evens = numbers.filter(x => x % 2 === 0); // [2] ``` --- #### 4. **对象属性控制** 通过 `Object.defineProperty` 定义属性特性(可写、可枚举、可配置): ```javascript const obj = {}; Object.defineProperty(obj, 'id', { value: 1, writable: false // 不可修改 }); obj.id = 2; // 静默失败(严格模式下报错) ``` --- #### 5. **函数绑定(`Function.prototype.bind`)** 绑定函数执行上下文(`this` 值): ```javascript const person = { name: "Bob" }; function greet() { console.log(this.name); } const boundGreet = greet.bind(person); // this指向person boundGreet(); // "Bob" ``` --- #### 6. **其他实用方法** - **字符串处理**:`String.prototype.trim()` ```javascript " Hello ".trim(); // "Hello" ``` - **对象操作**:`Object.keys(obj)` ```javascript Object.keys({a: 1, b: 2}); // ["a", "b"] ``` - **日期扩展**:`Date.now()` 获取时间戳 ```javascript const timestamp = Date.now(); // 当前毫秒数 ``` --- ### 兼容性与应用场景 ES5被所有现代浏览器完全支持[^4],适用于以下场景: - **旧代码维护**:兼容IE9+及老版本环境。 - **基础功能实现**:无需编译工具(如Babel)即可运行。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值