美文网首页程序员
js数据类型基础(前端面试基础题)

js数据类型基础(前端面试基础题)

作者: 北南桥 | 来源:发表于2020-07-05 15:06 被阅读0次

JavaScript是一种属于网络的高级脚本语言(计算机语言具有高级语言和低级语言之分。而高级语言又主要是相对于汇编语言而言的),广泛被用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。
通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
JavaScript 是一种轻量级的编程语言。
JavaScript 是可插入 HTML 页面的编程代码。
JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
JavaScript 很容易学习。

js中数据类型有哪些?

包括ES6新增的Symbol属性,js共有 7 种数据类型(BigInt暂不考虑);

基本数据类型:undefined、null、String、Number、Boolear、Symbol(ES6新增)
引用数据类型:Object

基本数据类型与引用数据类型

基本数据类型: 基本数据类型的变量是保存在 栈内存 中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在的,修改一个变量不会影响其他的变量。

引用数据类型:对象是保存在 堆内存 中的,每创建一个新的对象,就会在堆内中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当修改其中一个变量修改属性时,另一个也会受到影响。

基本数据类型与引用数据类型的区别:

  • 保存的内存不同。基本数据类型保存在栈内存中,引用类型保存在堆内存中;
  • 比较的方式不同。当比较两个基本数据类型的值时,本质上是比较值;当比较两个引用数据类型时,本质上是比较的对象的内存地址,如果两个对象的属性是一模一样的,但是地址不同,也会返回false;
  • 内存分配和垃圾回收。一般来说栈内存线性有序存储,容量小,系统分配效率高。而堆内存首先要在堆内存新分配存储区域,之后又要把指针存储到栈内存中,效率相对就要低一些了。
    垃圾回收方面,栈内存变量基本上用完就回收了,而推内存中的变量因为存在很多不确定的引用,只有当所有调用的变量全部销毁之后才能回收。

关于ES6中新增Symbol类型

ES6中新增 Symbol类型(属于基本类型),凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突;

let s = Symbol();
typeof s       // "symbol"

Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。注意,Symbol函数前不能使用new命令,否则会报错。

Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

使用Symbol 值作为对象属性名

let mySymbol = Symbol();

// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';

// 第二种写法
let a = {
  [mySymbol]: 'Hello!'
};

// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });

// 以上写法都得到同样结果
a[mySymbol] // "Hello!"

注意,Symbol 值作为对象属性名时,不能用点运算符。

因为点运算符后面总是字符串,所以不会读取mySymbol作为标识名所指代的那个值,导致a的属性名实际上是一个字符串,而不是一个 Symbol 值。

const mySymbol = Symbol();
const a = {};

a.mySymbol = 'Hello!';
a[mySymbol] // undefined
a['mySymbol'] // "Hello!"

相关文章

网友评论

    本文标题:js数据类型基础(前端面试基础题)

    本文链接:https://www.haomeiwen.com/subject/zkyrghtx.html