ES5新增方法

目录

数组方法     ^

迭代遍历方法: forEach(),map(),filter(),some(),every()
那么这几种方法有什么区别呢?

forEach()
  • 遍历数组
        // 语法 array.forEach(function(currentValue,index,arr))
        /*
        * currentValue 每一个数组元素
        * index 数组当前项的索引
        * array 数组对象本身
        */
        let arr = [1,2,3];
        arr.forEach(function(value,index,array){
            console.log('每一个数组元素'+value);
            console.log('每一个数组元素下标'+index);
            console.log('数组本身'+array);
        })
map()
  • 返回一个新数组,数组中的元素为原数组元素调用函数处理后的值
  • map方法按照原始数组元素顺序依次处理元素 并且不改变原数组
        // 语法 array.map(function(currentValue,index,arr),thisValue)
        /*
        * currentValue 每一个数组元素
        * index 数组当前项的索引
        * array 数组对象本身
        */
        let arr = [1,2,3];
        let newArr = arr.map(function (value,index,array) {
            return value * 2;
        });
        console.log(newArr); // [2,4,6]
filter()
  • 主要用于筛选数组 注意它直接返回一个新数组
        // 语法 array.filter(function(currentValue,index,arr))
        /*
        * currentValue 每一个数组元素
        * index 数组当前项的索引
        * array 数组对象本身
        */
        let arr = [21,3123,321,2,12];
        let newArr = arr.filter(function (value,index,array) {
            // return value < 20;
            return value % 2 !== 0 ;
        });
        console.log(newArr); // [21,3123,321]
some()
  • 查找数组中是否有满足条件的元素
  • 它的返回值是布尔值,如果查找到这个元素,就返回true,查不到就返回false
  • 如果找到第一个满足条件的元素,则终止循环,不在继续查找
        // 语法 array.some(function(currentValue,index,arr))
        /*
        * currentValue 每一个数组元素
        * index 数组当前项的索引
        * array 数组对象本身
        */
        let arr = [10,30,4];
        let flag = arr.some(function (value,index,array) {
            return value > 20;
        });
        console.log(flag); // true
        let arr1 = ['张三','李四','王麻子'];
        let flag1 = arr.some(function (value,index,array) {
            return value == '贝贝奇';
        });
        console.log(flag1); // false
every()
  • 用于检测数组所有元素是否都符合指定条件(通过函数提供)
  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测
  • 如果所有元素都满足条件,则返回 true.
		// 语法 array.some(function(currentValue,index,arr))
        /*
        * currentValue 每一个数组元素
        * index 数组当前项的索引
        * array 数组对象本身
        */
        let arr = [2,4,6,1];
        let flag = arr.every(function (value,index,array) {
            return value % 2 === 0;
        });
        console.log(flag); // false

字符串方法     ^

trim()
  • 该会从字符串的两端删除空白字符
  • trim方法并不影响原字符串本身,它返回一个新的字符串
let str = ' beibei ';
    console.log(str); //  beibei 
    console.log(str.length); // 8
    let newStr = str.trim();
    console.log(newStr); // beibei
    console.log(newStr.length); // 6
    console.log('-----------------');

对象方法     ^

Object.keys()
  • 用于获取对象自身所有的属性名,返回一个由属性名组成的数组
 	let obj = {
                name: 'beibei',
                age: 18,
                sex: '男'
            };
            let arr = Object.keys(obj);
            console.log(arr); // ['name','age','sex']
Object.defineProperty()
  • 定义新属性或修改原有的属性

语法格式

Object.defineProperty(obj,prop,descriptor);
/* 
         obj: 必须 目标对象
         prop 必须 需定义或修改的属性的名字
         descriptor 必须 目标属性所拥有的特性
*/
/* 
          第三个参数descriptor说明:以对象形式书写
          value:设置属性的值 默认为undefined
          writable 值是否可以重写  true|false 默认为false
          enumerabte 目标属性是否可以被枚举 true|false 默认为false
          configurable 目标属性是否可以被删除或是否可以再次修改特性 true|false 默认为false
*/

添加属性和修改属性

	let obj = {
                id:1,
                name: 'beibei',
                age: 18,
                sex: '男'
            };
            // 添加属性
            Object.defineProperty(obj, 'xueli', {
                value: '大专'
            });
            console.log(obj);
            // 修改属性
            Object.defineProperty(obj, 'age', {
                value: 21
            })
            console.log(obj);

第三个参数属性设置问题

			// writable 意思就是是否可以修改
            let obj = {
                id:1,
                name: 'beibei',
                age: 18,
                sex: '男'
            };
            Object.defineProperty(obj,'id',{
                writable:false // 默认为false不允许修改这个值
            });
            obj.id = 2;
            console.log(obj); // id依然为1
            console.log('-----------------');
            // enumerabte 意思就是能不能遍历出来
            Object.defineProperty(obj,'aihao',{
                value:'睡觉',
                enumerable:false, // 默认为false 不允许遍历出来
                configurable:false
            });
            let arr = Object.keys(obj);
            console.log(arr);
            // configurable 默认false 不能被删除和不允许修改第三个参数里面的特性
            obj.aihao = '打豆豆';
            delete obj.aihao;
            console.log(obj);
### ES6相比ES5新增的主要特性 #### 1. **块级作用域:`let` 和 `const`** - ES6引入了`let`和`const`关键字,用于声明变量。与`var`不同,`let`和`const`具有块级作用域,避免了变量提升问题,从而提高了代码的可读性和安全性[^1]。 #### 2. **箭头函数(Arrow Functions)** - 箭头函数提供了一种更简洁的函数定义方式,且不会创建自己的`this`绑定,而是继承自外层作用域。这使得在处理回调函数或事件处理器时更加方便[^2]。 ```javascript const add = (a, b) => a + b; ``` #### 3. **模板字符串(Template Strings)** - 模板字符串允许使用反引号(`` ` ``)来定义字符串,支持多行字符串以及内嵌表达式。通过`${}`语法可以将变量嵌入到字符串中。 ```javascript const name = "Alice"; const greeting = `Hello, ${name}!`; ``` #### 4. **解构赋值(Destructuring Assignment)** - 解构赋值可以从数组或对象中提取数据赋值给变量,简化了复杂数据结构的访问[^2]。 ```javascript const [first, second] = [1, 2]; const { phone } = { phone: "110" }; ``` #### 5. **默认参数(Default Parameters)** - 函数参数可以设置默认值,当调用函数时未传递对应参数时,会自动使用默认值。 ```javascript function greet(name = "Guest") { return `Hello, ${name}`; } ``` #### 6. **rest 参数与扩展运算符(Rest Parameters & Spread Operator)** - `rest`参数允许将不定数量的参数表示为一个数组,而扩展运算符则可以将数组或对象展开为单独的元素[^2]。 ```javascript function sum(...args) { return args.reduce((a, b) => a + b, 0); } const arr = [1, 2, 3]; console.log(sum(...arr)); ``` #### 7. **模块化(Modules)** - ES6引入了原生的模块支持,通过`import`和`export`关键字可以实现模块的导入与导出,替代了之前依赖第三方库(如RequireJS)的方式。 ```javascript // module.js export const pi = 3.14; // main.js import { pi } from './module.js'; ``` #### 8. **类(Classes)** - 虽然JavaScript本质上仍然是基于原型的,但ES6引入了`class`语法糖,使面向对象编程更加直观和简洁[^2]。 ```javascript class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} makes a noise.`); } } ``` #### 9. **Promise** - `Promise`对象用于异步操作的更好管理,提供了`.then()`和`.catch()`方法来处理成功或失败的结果[^2]。 ```javascript const promise = new Promise((resolve, reject) => { if (true) { resolve("Success!"); } else { reject("Error!"); } }); promise.then(data => console.log(data)).catch(err => console.error(err)); ``` #### 10. **Symbol** - `Symbol`是一种新的基本数据类型,用于创建唯一的标识符。它常用于防止对象属性名冲突[^3]。 ```javascript const sym = Symbol("description"); const obj = {}; obj[sym] = "Value"; ``` #### 11. **Proxy 和 Reflect** - `Proxy`对象用于定义自定义行为(如访问、赋值等),而`Reflect`则提供了一系列静态方法来操作对象[^5]。 ```javascript const handler = { get(target, key) { return target[key] || "Default Value"; } }; const proxy = new Proxy({}, handler); console.log(proxy.name); // Default Value ``` #### 12. **Set 和 Map** - `Set`是一个集合数据结构,存储唯一值;`Map`则允许使用任意类型的键值对。 ```javascript const set = new Set([1, 2, 3]); const map = new Map([[1, "one"], [2, "two"]]); ``` #### 使用场景 - ES6的新特性广泛应用于现代前端框架(如React、Vue、Angular)以及Node.js后端开发中。例如,箭头函数和解构赋值在编写组件时非常常见,而模块化支持则是构建工具(如Webpack)的基础[^2]。 #### 底层原理 - 新特性的底层实现大多依赖于JavaScript引擎(如V8)对ECMAScript标准的支持。例如,箭头函数通过改变词法作用域规则实现了`this`绑定,而`Proxy`则通过拦截器模式动态捕获对象的操作[^5]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值