JS 中有用的“冷知识”

567 阅读3分钟

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

JS 中的内置数据类型

内置数据类型在标准中写作 built-in types 其中包含了 7 种基本类型和 1 种引用类型,7种基本类型分别是 Undefined、Null、Boolean、Number、BigInt、String 和 Symbol,引用类型是 Object。

JS 中的内置对象

内置对象在标准中写作 built-in objects 包含了如下这些:Object、Function、Boolan、Symbol、 Error(多种)、Number、Date、Math、RegExp、 String、Array、JSON、Map、Set、Promise、 Proxy and Reflect.

箭头函数没有 this ?

通常大家的说法都是“箭头函数没有自己的 this”,这句话的真实情况应该是“箭头函数中的 this 是定义时的 this”,而不是使用时的 this,所以箭头函数的 this 会绑定父级函数的 this,如果父级函数也是箭头函数,则一直向上绑定。

“闭包”到底是什么?

JS 中的“闭包"是一个“绑定了特殊作用域的函数”,可以用来操作这个特殊作用域中的内部变量。

这个特殊作用域是:定义返回该闭包函数的环境在一次执行后得到的计算结果,以及该环境本身可以访问的其他作用域。

怎么理解词法分析和语法分析?

在 JavaScript 标准规范中,对代码的最小可用单元的定义是 "Token",意味着不可拆分的最小可用组成,比如数字、字母、换行符等等。

一些特定的字母组成的特定单词被认为是系统运行中特别“关键”的特殊组成部分,这些单词就叫做“关键字”,比如 function、return 等等,解析出这些词的过程就是词法分析的过程。词法分析会检查一段代码,然后从代码中找出每个部分,代码经过词法分析后,就已经知道了每一个部分是什么了。比如:

let a = 1 + 2;

如上代码经过词法分析阶段可以得到的 Token 是:['let', 'a', '=', '1', '+', '2'],在这之后就要开始进行语法分析了。语法分析需要根据得到的这些 Token 进行组合,从而推导出这些东西组织起来意味是什么。

当语法解析到 “let” 时,知道了这是要进行变量声明,那么在这之后遇到的下一个有效 Token 将会被认为是声明变量的变量名,如果遇到的 Token 是“关键字”,则会报语法错误 Uncaught SyntaxError: Unexpected token,(不同的变量声明有不同的处理方式,关于let的特性这里不多说),这里实例代码遇到了 a ,则声明表达式成立。语法分析继续执行的时候遇到了 ‘=’,意识到将要进行赋值操作,后面的流程都将基于赋值操作进行......最终得到的语法分析结果是“这一段代码声明了一个变量,然后执行了赋值操作”(当然运行时解析声明和赋值是分开的)。

所以,词法分析是告诉你这段代码里有什么,语法分析告诉你这段代码最终组成了什么。

怎么判断数字是不是质数(素数

// 不是质数 
function isNotPrime(N){ 
    if(N === 1){ return true; } 
    let mid = N / 2;
    for(let i = 2; i <= mid; i++)
    { 
        if(N % i === 0){ return true; }   return false; 
    }
}