每位 Web 开发者都应该知道的 7 个 JavaScript 基础知识

在本文中,咱们将讨论我认为 JavaScript 最重要、最独特的一些特性。javascript

一、函数是独立的行为单元

函数是基本单位,但这里重要的一点是,函数是独立的!在 Java 或 C# 等其余语言中,函数必须在类内声明,但在 JavaScript 中不是这样的。前端

函数能够在全局中被定义,也能够在模块里定义为可重用的单位。java

二、对象是属性的动态集合

对象实际上只是属性的集合。在其余语言中,它们被称为 Map、HashMap 或 HashTable。android

对象是动态的,即一旦建立,就能够添加、编辑或删除属性。ios

下面是一个使用字面量语法定义的简单对象。它有两个属性:git

const game = {
  title : 'Settlers',
  developer: 'Ubisoft'
}
复制代码

三、对象继承自其余对象

若是你曾经使用的语言是相似于 Java 或 C# 等基于 class 的语言,你可能习惯于从其余 class 继承 class。可是,JavaScript 不是这样的。github

对象继承自称为 prototypes 的对象。web

如前所述,在这种语言中,对象是属性的集合。当建立一个对象时,他有一个名为 __proto__ 的隐藏属性,它引用其余对象。这个被引用的对象称为 prototype编程

下面是一个建立空对象的例子(能够说,没有属性的对象):后端

const obj = {};
复制代码

即便 obj 看起来是空的没有任何属性,它实际上也是有一个隐藏属性 __proto__ 的:

obj.__proto__ === Object.prototype;
//true
复制代码

在这类对象上,咱们能够访问尚未定义的方法,例如 toString 方法,即便咱们尚未定义这样的方法。这怎么可能呢?

此方法继承自 Object.prototype。当尝试访问该方法时,JS 引擎首先尝试在当前对象上查找该方法,而后再查找其原型上的属性。

不要被 class 关键字误导了。class 只是原型系统的语法糖,帮助来自基于 class 语言的开发者熟悉 JavaScript。

四、函数就是值

在 JavaScript 中,函数就是值。就像其余值同样,函数能够赋值给变量:

const sum = function(x,y){ return x + y }
复制代码

这在其余编程语言中是作不到的。

与其余值同样,函数能够传递给不一样的函数或被函数返回。下面是一个函数返回另外一个函数的示例:

function startsWith(text){
  return function(name){
    return name.startsWith(text);
  }
}

const games = ['Fornite', 'Overwatch', 'Valorant'];
const newGames = games.filter(startsWith('Fo'));
console.log(newGames);
//["Fornite"]
复制代码

在同一个示例中,咱们能够看到 startsWith 函数返回的函数是如何做为参数发送到 filter 数组方法的。

五、函数能够闭包

函数内部能够定义函数。内部函数能够引用其余函数的变量。

并且,外部函数执行后,内部函数能够引用外部函数的变量。下面是关于这方面的例子;

function createCounter(){
  let x = 0;
  return function(){
    x = x + 1;
    return x;
  }
}

const count = createCounter();
console.log(count());//1
console.log(count());//2
console.log(count());//3
复制代码

count 函数能够从 createCounter 父函数访问 x 变量,即便在执行以后也是如此。count 就是闭包函数。

六、基本数据类型被视为对象

JavaScript 把基本类型看成对象,从而给人一种错觉。实际上,基本类型并非对象. 基本类型不是属性的集合。

然而,咱们能够在基本类型上调用方法。好比,咱们能够在字符串上调用 toUpperCase 方法:

const upperText = 'Minecraft'.toUpperCase();
console.log(upperText);
//'MINECRAFT'
复制代码

Minecraft 这样的简单文本是基本类型,自身没有任何方法。不过 JavaScript 会使用内置的 String 构造函数将其转换为对象,而后咱们就可以对新建立的对象执行 toUpperCase 方法。

经过在底层把基本类型转换为包装对象,JavaScript 容许你调用方法,从而视它们为对象。

七、JavaScript 是一种单线程语言

JavaScript 单线程的。这意味着在特定时间只执行一条语句。

在主线程中,两个函数不能同时执行。

你也许据说过像 web workers 这种并行执行函数的方式,可是 workers 不会和主线程共享数据。它们只经过信息传递来通讯 —— 什么都不是共享的。

这就容易理解了,咱们只须要注意让函数执行更快就行了。耗费长时间去执行一个函数会让页面无响应。

谢谢阅读。编码快乐!

若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索