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!"