We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JavaScript规定了几种语言类型
String、Number、Boolean、Symbol、Undefined、Null
Object
JavaScript的底层数据结构是什么
数据结构:数据结构是计算机存储和组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
数据类型:数据类型是数据结构中定义的一种性质相同的值的集合以及定义在这个值集合上的一组操作的总称。 简单的理解就是数据结构是数据元素之间的组合,数据类型是有一些相同性质的数据元素。
而在javasript中常见的数据结构就是栈与队列。
栈:是限定仅在表头进行插入和删除操作的线性表,就好比:一个死胡同,前面是“此路不通”,只有一个入口,如果一队人进入,只能队尾变对首出去。是一种先进后出的数据结构。
队列:同样它也是一种受限的线性表,不同的是它只允许在表的前端进行删除操作,在表的后端进行插入,就好比单行道,只能直行,不能调头。是一种先进先出的数据结构。 除了上述的线性数据结构,还有一种常见的非线性的数据结构就是树。
树:在数据元素之间明显的存在一种层级关系,我们可以看作是“树”。通过递归来实现一定规律的树结构,是数据结构比较复杂的算法。
堆栈、队列、树以及单向链接列表和双向链接列表都是JS底层的数据结构,也是编程语言中常用的数据结构。
symbol类型在实际开发中的应用、可手动实现一个简单的 Symbol
Symbol是Es6引入的原始数据类型,表示一个独一无二的值。
symbol的应用场景:
symbol的一些特性:
手动实现一个简单的symbol,相对与symbol的众多特性来说,要想完全模拟是不可能的,我们只能模拟一些特性。通过Object的一些方法来简单的实现一个属性名唯一的对象:
(function() { var root = this; var generateName = (function(){ var postfix = 0; return function(descString){ postfix++; return 'symbol' + descString + '_' + postfix } })() var SymbolPolyfill = function Symbol(description) { if (this instanceof SymbolPolyfill) throw new TypeError('Symbol is not a constructor'); var descString = description === undefined ? undefined : String(description) var symbol = Object.create({ toString: function() { return this.__Name__; } }) Object.defineProperties(symbol, { '__Description__': { value: descString, writable: false, enumerable: false, configurable: false }, '__Name__': { value: generateName(descString), writable: false, enumerable: false, configurable: false } }); return symbol; } root.SymbolPolyfill = SymbolPolyfill; })()
JavaScript中的变量在内存中的具体存储形式
在JS中变量可以用来保存两种类型的值:基本类型和引用类型。
优化内存最好的方式就是在变量所存储的数据无用的时候,将其值设为null,原值脱离执行环境,将会在下次运行时,被垃圾回收机制处理掉。
基本类型对应的内置对象,以及他们之间的装箱拆箱操作
把基本数据类型转换为对应的引用类型的操作称为装箱,把引用类型转换为基本的数据类型称为拆箱。
每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。
装箱有两种方式:显式和隐式。
var num = 9; num.toFixed(2);// "9.00"
var num = new Number(9); num.toFixed(2);// "9.00" num = null; // 每次调用都会执行如上流程,
var num = new Number(9); // num Number{9}
var num = new Number(9); num+'';//'9'
拆箱
num.toString()
理解值类型和引用类型
null和undefined的区别
至少可以说出三种判断JavaScript数据类型的方式,以及他们的优缺点,如何准确的判断数组类型
可能发生隐式类型转换的场景以及转换原则,应如何避免或巧妙应用
在JS中发生隐式转换的场景:
上面所说的是隐式转化为布尔值的一些场景,还有隐式转化成String和Number的。 - +运算符可以把Number类型的转化为String; - -、*、/等运算符可以把String类型的转化成Number;
var a = { i:0, valueOf:function(){ return ++this.i; } } if( a== 1 && a==2 && a==3){ console.log(1); } //1
出现小数精度丢失的原因, JavaScript可以存储的最大数字、最大安全数字, JavaScript处理大数字的方法、避免精度丢失的方法
出现精度丢失的原因:在js中,采用双精度存储,占用64bit。1位用来表示符号位,11位用来表示指数,52位用来表示尾数。
0.1+0.2 //0.30000000000000004 0.1+0.22 //0.32
因为尾数最大为52,所以在js中可以存储的最大安全数字Math.pow(2,53)-1,也就是Number.MAX_SAFE_INTEGER;
可以存储的最大数字为Number.MAX_VALUE;
Number.MAX_SAFE_INTEGER //9007199254740991 Number.MAX_VALUE //1.7976931348623157e+308
对于超出安全数字的操作,js提供了BigInt。
1234567890123456789n * 123nR1234567890123456789n * 123n //151851850485185185047n
The text was updated successfully, but these errors were encountered:
No branches or pull requests
JavaScript规定了几种语言类型
String、Number、Boolean、Symbol、Undefined、Null
Object
JavaScript的底层数据结构是什么
数据结构:数据结构是计算机存储和组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
数据类型:数据类型是数据结构中定义的一种性质相同的值的集合以及定义在这个值集合上的一组操作的总称。
简单的理解就是数据结构是数据元素之间的组合,数据类型是有一些相同性质的数据元素。
而在javasript中常见的数据结构就是栈与队列。
栈:是限定仅在表头进行插入和删除操作的线性表,就好比:一个死胡同,前面是“此路不通”,只有一个入口,如果一队人进入,只能队尾变对首出去。是一种先进后出的数据结构。
队列:同样它也是一种受限的线性表,不同的是它只允许在表的前端进行删除操作,在表的后端进行插入,就好比单行道,只能直行,不能调头。是一种先进先出的数据结构。
除了上述的线性数据结构,还有一种常见的非线性的数据结构就是树。
树:在数据元素之间明显的存在一种层级关系,我们可以看作是“树”。通过递归来实现一定规律的树结构,是数据结构比较复杂的算法。
堆栈、队列、树以及单向链接列表和双向链接列表都是JS底层的数据结构,也是编程语言中常用的数据结构。
symbol类型在实际开发中的应用、可手动实现一个简单的 Symbol
Symbol是Es6引入的原始数据类型,表示一个独一无二的值。
symbol的应用场景:
symbol的一些特性:
手动实现一个简单的symbol,相对与symbol的众多特性来说,要想完全模拟是不可能的,我们只能模拟一些特性。通过Object的一些方法来简单的实现一个属性名唯一的对象:
JavaScript中的变量在内存中的具体存储形式
在JS中变量可以用来保存两种类型的值:基本类型和引用类型。
优化内存最好的方式就是在变量所存储的数据无用的时候,将其值设为null,原值脱离执行环境,将会在下次运行时,被垃圾回收机制处理掉。
基本类型对应的内置对象,以及他们之间的装箱拆箱操作
把基本数据类型转换为对应的引用类型的操作称为装箱,把引用类型转换为基本的数据类型称为拆箱。
每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。
装箱有两种方式:显式和隐式。
拆箱
理解值类型和引用类型
但是对基本类型的操作(string、number)会执行装箱的操作,会转化成引用类型。
同样对引用类型的操作也可能会执行拆箱的操作,转换为值类型。
null和undefined的区别
至少可以说出三种判断JavaScript数据类型的方式,以及他们的优缺点,如何准确的判断数组类型
可能发生隐式类型转换的场景以及转换原则,应如何避免或巧妙应用
在JS中发生隐式转换的场景:
上面所说的是隐式转化为布尔值的一些场景,还有隐式转化成String和Number的。
- +运算符可以把Number类型的转化为String;
- -、*、/等运算符可以把String类型的转化成Number;
出现小数精度丢失的原因, JavaScript可以存储的最大数字、最大安全数字, JavaScript处理大数字的方法、避免精度丢失的方法
出现精度丢失的原因:在js中,采用双精度存储,占用64bit。1位用来表示符号位,11位用来表示指数,52位用来表示尾数。
因为尾数最大为52,所以在js中可以存储的最大安全数字Math.pow(2,53)-1,也就是Number.MAX_SAFE_INTEGER;
可以存储的最大数字为Number.MAX_VALUE;
对于超出安全数字的操作,js提供了BigInt。
The text was updated successfully, but these errors were encountered: