📜  JavaScript 后端基础知识

📅  最后修改于: 2021-10-19 05:01:40             🧑  作者: Mango

Node.js 的流行无疑推动了 javascript 作为后端语言的使用,为了在后端开始使用 javascript,您需要了解该语言的一些基础知识和一般规则。以下文章是开始使用 JavaScript 进行后端开发。

JavaScript 引擎

每个浏览器都有自己的 JavaScript 引擎,用于支持 JavaScript 脚本以使其正常工作。 javascript 引擎的基本工作是获取 javascript 代码,然后将其转换为可以被浏览器解释的快速、优化的代码。下面是一些最流行的浏览器中使用的 JavaScript 引擎的名称。

  • 铬:V8
  • 火狐:蜘蛛猴
  • Safari:JavaScriptCore
  • Microsoft Edge/Internet Explorer:Chakra/ChakraCore

ECMA 脚本标准: ECMA 脚本标准是由欧洲计算机制造协会标准化的商标脚本语言规范。ECMAScript 提供了脚本语言(如 javascript)必须遵守的规则、细节和指南,才能被视为符合 ECMAScript。

JavaScript 中的类型定义

动态类型:解释器根据特定条件动态计算出变量的类型。

原始数据类型:原始数据类型是没有附加方法的数据类型,即某些定义的方法不能与它们一起使用,并且它们被单独使用。尽管有一些方法可以通过包装这些原始数据类型变量来使用这些方法(在下一篇文章中介绍)。以下是属于原始类别的数据类型:

  1. 未定义:如果变量存在但未定义,则将其归类为未定义。
  2. null:如果变量存在但未明确设置,则它属于 null 类别。
  3. boolean: Boolean 代表一个逻辑实体,可以有两个值:true 和 false。
  4. number: number 是定义数字的数据类型,可以是整数、浮点数、双精度数。这里唯一的问题是,每次定义一个数字时,我们都必须分配一个相当于 double 变量的内存。
  5. 字符串:这是用来定义一个字符的字符串值。
  6. 符号:这是 ECMA 脚本 6 中新增的一种特殊数据类型。数据类型“符号”是一种原始数据类型,其特性是该类型的值可用于创建匿名对象属性。

目的:
JavaScript 中的一切都是对象。也就是说,我们知道的每个变量、字符串、数组或任何其他结构都属于对象类别。 Java Script 对象几乎可以被所有语言理解并且易于阅读。

创建对象:创建对象有 4 种方式:
1.用构造函数创建对象:

//simple function
function vehicle(name,maker,engine){
    this.name = name;
    this.maker = maker;
    this.engine = engine;
}
//new keyword to create an object
let car  = new vehicle('GT','BMW','1998cc');
//property accessors
console.log(car.name);
console.log(car.maker);
console.log(car['engine']);

输出:

2.使用对象字面量

//creating js objects with object literal
let car = {
    name : 'GT',
    maker : 'BMW',
    engine : '1998cc'
};
//property accessor
console.log(car.name); //dot notation
console.log(car['maker']); //bracket notation

输出

3. 使用 Object.create() 方法创建对象:

const coder = {
    isStudying : false,
    printIntroduction : function(){
        console.log(`My name is ${this.name}. Am I studying?: ${this.isStudying}`);
    }
};
const me = Object.create(coder);
me.name = 'Mukul';
me.isStudying = true;
me.printIntroduction();

输出:

4.使用es6类:

//using es6 classes
class Vehicle {
  constructor(name, maker, engine) {
    this.name = name;
    this.maker =  maker;
    this.engine = engine;
  }
}
  
let car1 = new Vehicle('GT', 'BMW', '1998cc');
  
console.log(car1.name);  // GT

输出:

强制转换我们在 C、C++、 Java称为类型转换,在 JavaScript 中称为强制转换。它基本上是将值从一种类型转换为另一种类型(如字符串到整数,整数到布尔值等)的过程。
强制分为两种:

  • 显式强制
    显式强制是我们将变量显式定义为数据类型的过程。
    let x = 42;
    let explicit = String(x); // explicit is set to "42"
    let explicit2 = x.toString(); //another method to explicitly change type.
    
  • 隐式强制隐式强制是解释器在特定条件下动态类型转换变量的过程。
    let x = 42;
    let implicit = x + " "; // interpreter automatically sets implicit as "42"
    

范围

变量生命周期:变量生命周期是从它们被声明的地方到它们的函数结束。如果没有定义函数,则变量的作用域是全局的。

提升:函数定义被提升,但不是变量声明。这意味着当一个函数被声明时,它可以在你的代码中的任何地方使用。有关在 javascript 中提升的更多信息,请访问这里。

JavaScript 引擎分两个不同的阶段工作

  1. 创建阶段:在执行代码之前,引擎会读取整个文件,如果找到则抛出一个语法错误。当它这样做时,任何函数定义都将保存在内存中。不会运行任何变量初始化,但会声明变量名称。
  2. 执行阶段:执行阶段是代码运行的阶段,因此上述变量提升示例错误为未定义,因为在创建阶段,变量已声明但未在创建阶段定义。

这就是本文。我们将在下一篇后续文章中介绍一些高级主题。