发布于 2026-01-06 2 阅读
0

学习 ES6/JavaScript - 第二部分

学习 ES6/JavaScript - 第二部分

引言:我们来稍作复习

学习过程中一个奇妙的体验就是先学习理论知识,然后再将其付诸实践。我最初出于对前端技术的好奇心开始学习 JavaScript,但随着学习的深入,我发现这门语言越来越有趣了。

我一开始就从事实讲起现在我认为是时候深入学习基础知识了,这样在实施过程中我们就不会被理论问题所困扰。

主题

  • 关于物体的一切。
  • 唯一数据类型。

1. 关于物体的一切

对象几乎在所有编程语言中都会用到,它用于存储各种数据(包括复杂实体)的键值对集合。数据以键值对结构存储,其中键必须是字符串或任何符号(特殊类型将在下文讨论),而值可以是任何类型。

如何创建对象?
创建空对象有两种方法:使用对象构造函数或字面量。

我将以注册表为例来解释,注册表包含开发人员的姓名、年龄、工作年限等信息……

let register = new Object{}; //using object constructor syntax. 
// OR
let register = {};   // using object literals syntax.
Enter fullscreen mode Exit fullscreen mode

1.1 添加、访问和删除

键 = 属性名称。
值 = 属性值。

在对象初始化时,键和值应该用冒号 (:) 分隔。可以使用点号 (.) 添加对象,或者使用方括号 [] 添加多字键。让我们来看每种情况的最简单示例。

let register = {
  user:"vikram",
  age:24,
  isAdmin:true,
};

console.log(register); 
// Output: { user: 'vikram', age: 24, isAdmin: true } 

register.experience = 78; // adding data in object

register["university education"] = "Mumbai"; 
/* adding data with the multiword key
you can't access multiword key by (.), you need to access in the same way of addition. 
ie. alert(register["university education"])
*/

delete register.isAdmin; // deleting key

//do check the output and spot the difference.
console.log(register);
Enter fullscreen mode Exit fullscreen mode

我想我不需要解释上面的代码了。它很简单,一目了然,对吧?

1.2 房产价值速记

简写是一种优化代码、简化代码的方法。让我们通过一个例子来学习:

//before shorthand
function myUser(name,age){
return {
  name:name,
  age:age,
 }
}
let getUser = myUser("vikram",24);
alert(getUser.name);
Enter fullscreen mode Exit fullscreen mode

如您所见,如果键名与参数冲突,上述示例就会变得复杂。因此,让我们看看简写版本。

function myUser(name,age){
return {
 name,
 age,
 }
}
let getUser = myUser("vikram",24)
alert(getUser.name)
Enter fullscreen mode Exit fullscreen mode

这不是更简化了吗?事实上,你可以同时使用常规的属性值赋值方式和简写方式。

1.3 克隆和合并

克隆是指在不影响原对象的情况下创建对象的副本。是的!大多数情况下,可以使用引用复制来代替克隆。虽然克隆对象不是内置函数,但它是可以实现的。我们来看一个例子:

let register = {
  "name":"vikram",
  "age":24,
}

let clone_register = {}

//copying register properties to clone_register
for (let key in register){
  clone_register[key] = register[key];
}
console.log(clone_register);
Enter fullscreen mode Exit fullscreen mode

上面的例子已经很清楚了。还有另一种直接获取对象副本的方法,即使用 object.assign,您可以在下面的示例中找到语法。

let newObjectName = Object.assign(dest,[src1,src2,src3....srcN])
Enter fullscreen mode Exit fullscreen mode

让我们通过以下示例来学习如何构建用户访问级别。

let clone_register = {};
for (let key in register){
  clone_register[key] = register[key];
}

let permission1 = {canView : "true"};
let permission2 = {canRead : "true"};

Object.assign(clone_register, permission1, permission2);
console.log(clone_register);
/* output:
{ user: 'vikram',
  age: 23,
  experience: 78,
  'university education': 'Mumbai',
  canView: 'true',
  canRead: 'true' }
*/
Enter fullscreen mode Exit fullscreen mode

2. 唯一数据类型

Javascript 以其独特的方式脱颖而出。在前一部分中,您可能已经看到了一些有趣的数据类型,例如映射、集合以及可迭代对象,如数组、字符串、列表等等。

我还会在这一部分提到一些其他例子,例如

  • WeakMap 和 WeakSet。
  • 销毁作业。

2.1 WeakMap 和 WeakSet

WeakMap
让我们通过比较 Map 和 WeakMap 来学习一下。最主要的区别在于 WeakMap 必须使用 Object 作为键,而不是普通的原始值。由于 WeakMap 的键是一个对象,所有其他引用都会自动移除,从而释放内存。
我知道这有点令人困惑,好,我们Vikram现在假设 Map 的键是 Object,sahuWeakMap 的键是 Object。当我们从 Map 中删除键时,键本身Vikram会被移除,但分配的内存不会被释放;而对于 WeakMap 中以 Object 作为键的情况sahu,对该键的内存引用会自动释放。

WeakMap 示例:

let john = { name: "Vikram" };
let weakMap = new WeakMap();
weakMap.set(Vikram, "...");

Vikram = null; // overwrite the reference

// Vikram is removed from memory!
Enter fullscreen mode Exit fullscreen mode

WeakMap 与 Map 具有类似的方法,例如:

weakMap.get(key)         //returns value for the key if exists
weakMap.set(key, value)  //Adds new entry in WeakMaps
weakMap.delete(key)      
weakMap.has(key)
Enter fullscreen mode Exit fullscreen mode

WeakSet
与 WeakMap 类似。

  • 它类似于 Set,但你只能向 WeakSet 添加对象,而不能添加基本数据类型。
  • 当一个对象存在于集合中,且可以从其他地方到达时,该对象就存在于集合中。
  • 与 Set 类似,它支持 add、has 和 delete,但不支持 size、keys() 和迭代。举个例子,我们将添加一些用户作为访问过的网站,稍后通过重新声明将其删除null
let visitedSet = new WeakSet();

let Vikram = { name: "Vikram" };
let Nikhil = { name: "Nikhil" };
let Anish = { name: "Anish" };

visitedSet.add(Vikram); // Vikram visited us
visitedSet.add(Nikhil); // Then Nikhil
visitedSet.add(Vikram); // Vikram again

// visitedSet has 2 users now

// check if Vikram visited?
alert(visitedSet.has(Vikram)); // true

// check if Anish visited?
alert(visitedSet.has(Anish)); // false

Vikram = null;
// visitedSet will be cleaned automatically 
Enter fullscreen mode Exit fullscreen mode

2.2 解构赋值

在 Javascript 中,用于存储、检索和操作数据的最常用数据类型是ObjectT 或ArraysC。

有时候,你可能只需要传递特定索引处的单个值,而不是将整个对象或数组传递给函数进行计算,对吧?这时,析构赋值就派上用场了。

这其实就是将数组赋值给一个变量。我们举个例子来说明:

let myData = ["Ed","Eed","Eddy","tom And jerry"];

let [pyscho,pyschoFriend,pyschoFriend2,EveryOneFvrt] = myData;

console.log(EveryOneFvrt); //tom And jerry
Enter fullscreen mode Exit fullscreen mode

是不是很简单?是的,我知道这很容易。析构赋值并不意味着破坏,而是指解构,即将数组/对象元素赋值给变量。

总结……

希望您喜欢以上博文。我还会继续分享一些 JavaScript 的基础技巧,比如proto、getter 和 setter 等等,希望能给您带来一些启发。

谢谢!请分享哦🤗

文章来源:https://dev.to/sahuvikramp/learning-es6-javascript-part-2-4ff1