当前位置: 首页 > news >正文

Es6新特性总结

在阅读Es6文档的时候学到了很多新知识,写博客记录一下其中一部分

文章目录

  • 一、变量声明 let const var
  • 二、新的基本数据类型
    • symbol
  • 三、function
    • 字符串新方法
    • 对象object新方法
      • 1. Object.is()
      • 2. Object.assign()
      • 3. Object.keys()、Object.values()、Object.entries()
    • 数组新方法
      • 1. Array.from()
      • 2. includes()
    • eval()
  • 四、属性描述符
      • 什么时候会出现属性不可配置
  • 五、class(类)
      • 核心概念
      • 重要特性
  • 总结


一、变量声明 let const var

  1. let和const具有块级作用域,var不存在块级作用域。
  2. 变量提升:var存在变量提升,let和const不存在。
  3. 重复声明:var可以重复声明,其他俩个不存在
  4. 暂时性死区:用let和const声明变量的时候,该变量都 不可用,称为暂时性死区。使用var声明的变量没有暂时性死区。
  5. 初始值设置:只有const在声明变量的时候需要设置初始值

二、新的基本数据类型

symbol

symbol通过symbol创造,他的特性就是通过symbol()创造出来的都是独一无二的,即使描述相同值也不同。主要用途是作为对象的属性名,避免属性名冲突

// 创建一个 Symbol
const sym1 = Symbol();
const sym2 = Symbol('description'); // 可选的描述文本,仅用于调试console.log(typeof sym1); // "symbol"
console.log(sym1 === sym2); // false
console.log(sym2.description); // "description"(获取描述)

三、function

字符串新方法

  1. includes()可以判断字符串中是否有目标字符串,返回true和false
  2. startWith()和endWith()可以判断字符串是否以目标字符串为开头或结尾,目标字符串就是函数参数,而增加的第二个参数可以指定开始查找的位置。
  3. repeat()函数用于将原字符串重复指定的次数,并返回一个新的字符串。俩个参数一个是重复的字符串,一个是重复的次数。
  4. padStart()和padEnd()用指定字符串按照给定长度从后面或者前面补全字符串
    代码如下(示例):
let arr = 'hell';
console.log(arr.padEnd(5,'o'));  //'hello'
console.log(arr.padEnd(6,'o'));  //'helloo'
console.log(arr.padEnd(6));  //'hell  ',如果没有指定将用空格代替console.log(arr.padStart(5,'o'));  //'ohell'

对象object新方法

1. Object.is()

是用来判断俩个值是否为同一值,返回布尔值,它与严格相等运算符(===)类似,但在处理一些特殊值时行为有所不同。在比较NaN和NaN时Object.is()返回true,而严格相等运算符返回false。比较+0和-0的时候Object.is()返回false另一个返回true。

// 基本类型比较
console.log(Object.is('foo', 'foo'));    // true
console.log(Object.is('foo', 'bar'));    // false// 数字比较
console.log(Object.is(1, 1));            // true
console.log(Object.is(1, '1'));          // false
console.log(Object.is(NaN, NaN));        // true (与 === 不同)
console.log(Object.is(+0, -0));          // false (与 === 不同)// 对象比较(比较引用)
const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;console.log(Object.is(obj1, obj2));      // false(不同引用)
console.log(Object.is(obj1, obj3));      // true(相同引用)

2. Object.assign()

该方法可以浅拷贝对象,一般用于合并对象,它可以将一个或多个源对象的可枚举属性复制到目标对象,并返回合并后的目标对象。

const target = { a: 1, b: 2 };
const source1 = { b: 3, c: 4 };
const source2 = { d: 5 };Object.assign(target, source1, source2);
console.log(target); // { a: 1, b: 3, c: 4, d: 5 }

3. Object.keys()、Object.values()、Object.entries()

  • Object.keys()可以返回对象中所有的属性名
  • Object.values()返回对象里面的所有属性值
  • Object.entries()将每一对属性和属性值按照数组的形式返回

数组新方法

1. Array.from()

是 JavaScript 中用于从类数组对象(array-like)或可迭代对象(iterable)创建新数组实例的方法。
Array.from(arrayLike[, mapFn[, thisArg]])

  • arrayLike:必需,类数组对象或可迭代对象(如字符串、Set、Map、NodeList 等)
  • mapFn:可选,映射函数,对每个元素进行处理后再放入新数组
  • thisArg:可选,执行 mapFn 时的 this 指向
// arguments 对象(函数中的类数组)
function func() {return Array.from(arguments);
}
console.log(func(1, 2, 3)); // [1, 2, 3]// 带 length 的对象
const arrayLike = { length: 3, 0: 'a', 1: 'b', 2: 'c' };
console.log(Array.from(arrayLike)); // ['a', 'b', 'c']

他也可以用在拷贝数组上,拷贝的方式是浅拷贝

const original = [1, 2, 3];
const copy = Array.from(original);
console.log(copy); // [1, 2, 3]
console.log(copy === original); // false

2. includes()

判断数组中是否存在该元素,返回布尔值,与字符串那个方法使用方法相似

eval()

eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。如果其参数不是字符串,则会将参数原封不动地返回。
function构造函数允许用字符串创造函数,在创造函数里面加上“use strict”可以开启严格模式。严格模式的好处:消除静默错误,转为抛出错误。防止意外的全局变量,要求函数参数名唯一,在非严格模式下,相同参数名,后一个会覆盖前一个,而在严格模式下,这个是不允许的。严格 模式禁止八进制字面量,而且禁止把eval和arguments作为变量名。在函数里面打印this得到undefined。而且禁止对制度变量赋值。


四、属性描述符

js中的每个对象属性都有一些隐藏的特性,叫属性描述符。

const obj = { name: 'John' };// 获取属性描述符
const descriptor = Object.getOwnPropertyDescriptor(obj, 'name');
console.log(descriptor);
// 输出: { value: 'John', writable: true, enumerable: true, configurable: true }

当 configurable: false 时,以下操作会被禁止:

  • 不能删除属性
  • 不能修改属性描述符,除了 writable的修改,如果尝试修改会报错
  • 不能修改属性类型
    这就叫属性不可配置

什么时候会出现属性不可配置

  • 使用Object.defineProperty()明确设置,将configurable的值设置为false。
const obj = {};
Object.defineProperty(obj, 'readOnly', {value: 'cannot change',writable: false,enumerable: true,configurable: false // 明确设置为不可配置
});
  • 内置对象和方法的属性
// Math.PI 是不可配置的
const descriptor = Object.getOwnPropertyDescriptor(Math, 'PI');
console.log(descriptor.configurable); // false// 数组的length属性通常不可配置
const arr = [1, 2, 3];
const lengthDescriptor = Object.getOwnPropertyDescriptor(arr, 'length');
console.log(lengthDescriptor.configurable); // false
  • 使用Object.freeze()、Object.seal()、Object.preventExtensions()
    Object.freeze(obj)
    静态方法可以使一个对象被冻结。冻结对象可以防止扩展,并使现有的属性不可写入和不可配置。被冻结的对象不能再被更改:不能添加新的属性,不能移除现有的属性,不能更改它们的可枚举性、可配置性、可写性或值,对象的原型也不能被重新指定。freeze() 返回与传入的对象相同的对象。参数obj是想要冻结的对象。但这是浅冻结,如果对象的属性本身他们也是对象则这些对象不会被冻结。
    Object.seal()
    静态方法密封一个对象。密封一个对象会阻止其扩展并且使得现有属性不可配置。密封对象有一组固定的属性:不能添加新属性、不能删除现有属性或更改其可枚举性和可配置性、不能重新分配其原型。只要现有属性的值是可写的,它们仍然可以更改。seal() 返回传入的同一对象。他与Object.freeze(obj)的区别就是后者不允许修改属性值,但Object.seal() 可以修改属性值,只要他们是可写的。其他的和上面哪个差不多。
    Object.preventExtensions()
    静态方法可以防止新属性被添加到对象中(即防止该对象被扩展)。它还可以防止对象的原型被重新指定。这个方法导致目标对象的[[Prototype]]属性不可变,即原型不能被重新设置,但其他属性依旧保持可变。

五、class(类)

在Es6中,class是一个新的语法糖,用于创建对象和实现面向对象编程(OOP)。它提供了更简洁、更接近传统面向对象语言的语法,但其本质仍然是基于原型的继承系统。简化了原型继承的写法,使代码个更加简洁和可读。
基本语法如下

class ClassName {// 构造函数constructor(parameters) {// 初始化实例属性}// 实例方法methodName() {// 方法体}// 静态方法static staticMethod() {// 静态方法体}// getter 和 setterget property() {// 返回属性值}set property(value) {// 设置属性值}
}

核心概念

  1. 类的定义与实例化
class Person {// 构造函数,创建实例时自动调用constructor(name, age) {this.name = name; // 实例属性this.age = age;}// 实例方法sayHello() {console.log(`Hello, I'm ${this.name}`);}// 静态方法(属于类本身,而非实例)static createAdult(name) {return new Person(name, 18);}
}// 实例化类
const person1 = new Person("Alice", 25);
person1.sayHello(); // 输出: "Hello, I'm Alice"// 使用静态方法
const adult = Person.createAdult("Bob");
adult.sayHello(); // 输出: "Hello, I'm Bob"
  1. 继承(extends 和 super)
class Student extends Person {constructor(name, age, major) {// 调用父类构造函数super(name, age);this.major = major; // 子类特有属性}// 重写父类方法sayHello() {super.sayHello(); // 调用父类方法console.log(`I'm studying ${this.major}`);}// 子类特有方法study() {console.log(`${this.name} is studying`);}
}const student = new Student("Charlie", 20, "Computer Science");
student.sayHello(); 
// 输出: 
// "Hello, I'm Charlie"
// "I'm studying Computer Science"
student.study(); // 输出: "Charlie is studying"
  1. Getter 和 Setter
    用于封装属性访问:
class Rectangle {constructor(width, height) {this._width = width;this._height = height;}// Getterget area() {return this._width * this._height;}// Setterset width(value) {if (value > 0) {this._width = value;} else {throw new Error("Width must be positive");}}
}const rect = new Rectangle(10, 20);
console.log(rect.area); // 输出: 200(调用 getter)rect.width = 15; // 调用 setter
console.log(rect.area); // 输出: 300

重要特性

1.不存在提升 :类声明不会像函数那样被提升,必须先定义再使用。
2.
严格模式 :类体内部自动运行在严格模式下(“use strict”)。
3.
方法不可枚举 :类定义的方法默认是不可枚举的,与 Object.defineProperty 定义的方法行为一致。
4.
必须使用 new 调用 :直接调用类(如 Person())会抛出错误。
5.
私有属性(ES2022 引入)
:使用 # 前缀定义私有属性,只能在类内部访问:

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。


文章转载自:

http://y8gG9j6A.wypyL.cn
http://KRoYjM1P.wypyL.cn
http://CuDeqlXi.wypyL.cn
http://VCxarMjm.wypyL.cn
http://VyxQ2xBj.wypyL.cn
http://R04BmB50.wypyL.cn
http://wYB1daoi.wypyL.cn
http://pytUw4KU.wypyL.cn
http://tjFmdsB0.wypyL.cn
http://0uudnBw1.wypyL.cn
http://581em7J7.wypyL.cn
http://Kllozz4r.wypyL.cn
http://NjcgcR02.wypyL.cn
http://1ZWvldkG.wypyL.cn
http://XJMUTTH3.wypyL.cn
http://R65UItXt.wypyL.cn
http://kXWtJlIh.wypyL.cn
http://UQGmb2Ko.wypyL.cn
http://ZybvxFSq.wypyL.cn
http://Zh7TVqws.wypyL.cn
http://JtdlHLHP.wypyL.cn
http://J6hU0A6s.wypyL.cn
http://sig9BrRO.wypyL.cn
http://wqgSoUnJ.wypyL.cn
http://AOVR76Pc.wypyL.cn
http://0yScFI6Y.wypyL.cn
http://l84nWkvz.wypyL.cn
http://3OiytpR1.wypyL.cn
http://shgqHO7P.wypyL.cn
http://3cW3Uvn6.wypyL.cn
http://www.dtcms.com/a/376353.html

相关文章:

  • 【云原生网络篇】从 Private Endpoint 到 K8s Pod 对外注册:一次网络底层的全面探究
  • 老梁聊全栈系列:(阶段一)从单体到云原生的演进脉络
  • AI 模型训练过程中参数用BF16转向FP16的原因
  • win11,安装c++版OpenCV,带cuda
  • openEuler 24.03 (LTS-SP2)简单KVM安装+桥接模式
  • websocket 服务器往客户端发送的数据要加掩码覆盖吗?
  • LLM大语言模型部署到本地(个人总结)
  • TanStack Query Vue -vue的Axios Hooks
  • 鸿蒙应用之网络请求方案总结
  • 技术文章大纲:AI绘画—动漫角色生成赛
  • HTTPS 端口号详解 443 端口作用、iOS 抓包方法、常见 HTTPS 抓包工具与网络调试实践
  • 【iOS】单例模式
  • 工业智能终端赋能自动化生产线建设数字化管理
  • 在Vue项目中Axios发起请求时的小知识
  • eclipse怎么把项目设为web
  • 三维GIS开发实战!Cesium + CZML 实现火箭飞行与分离的 3D 动态模拟
  • Hybrid应用性能优化实战分享(本文iOS 与 H5为例,安卓同理)
  • Python 常用数据类型详解:相同点、差异与使用指南
  • Elasticsearch安装启动常见问题全解析
  • webpack turbopack vite 前端打包工具
  • NLP项目实战 | Word2Vec对比Glove进行词类比测试
  • 基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning算法研究(matlab)
  • 南京大学 LLM开发基础(一)前向反向传播搭建
  • GitHub 热榜项目 - 日榜(2025-09-10)
  • 基于YOLO集成模型的无人机多光谱风电部件缺陷检测
  • ssh域名过期,消息推送到企业微信
  • 【Python】爬虫html提取内容基础,bs4
  • zabbix告警推送钉钉
  • Android系统框架知识系列(二十):专题延伸:JVM vs ART/Dalvik - Android运行时演进深度解析
  • 关于在pycharm终端连接服务器