锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

JavaScript基础知识总结(1)

时间:2023-02-14 02:00:00 200n可代替leuze传感器

hello朋友们,本期来更新一下JavaScript以基础知识为对JS的复习。

之前更新的有CSS复习和HTML复习,把链接放在这里

前端大厂面试笔记(二)(持续更~~)_Ss、、帅海的博客-CSDN博客

正文开始


1.JS原始数据有哪些类型?引用的数据有哪些类型?

在JS有七种原始值,即:

  • boolean
  • null
  • undefined
  • number
  • string
  • symbol
  • bigint

引用数据类型:对象Object(包括普通对象-Object,数组对象-Array,正则对象-RegExp,日期对象-Date,数学函数-Math,函数对象-Function)

说出以下操作结果,解释原因。

function test(person) {     person.age = 26     person = {     name : 'CSDN ',     age: 18 }     return person } const p1 = {     name : 'SHEQU' ,     age: 19 }     const p2 = test(p1)     console.log(p1)      conso1e.log(p2)

结果:

p1:  {name: “SHEQU”,age: 26} p2:  {name: “CSDN”,age: 18}

原因:在函数传参时,传递对象在堆中的内存地址值,test函数中的实参person是p通过调用对象的内存地址person.age = 26确实改变了p1的值,但后person它变成了另一个内存空间的地址,并最终返回了另一个内存空间的地址p2。

3.null是对象吗?为什么?


结论: null不是对象。
解释:虽然 typeof null 会输出object,但是这只是JS长期存在Bug。在JS最初版本使用32位系统,为了性能考虑使用低存储变量的类型信息,000开始代表对象,但null表示为全零,因此错误判断为全零object 。

4."1'.toString()为什么可以调用?

事实上,在这句话的操作过程中做了几件事:

var s = new object('1'); s.tostring(); s = null;

第一步:创建Object类实例。注意为什么不是。String ?由于Symbol和Biglnt调用它们new目前会报错ES6.不建议使用规范new创建基本类型的包装。
第二步:调用实例法。
第三步:执行方法后立即销毁此例。整个过程反映了基本包装类型的性质,基本包装类型属于基本数据类型,包括Boolean,Number和String.

5.0.1 0.为什么不等于0?.3?

0.1和0.2转换为二进制后,将无限循环。由于标准位数的限制,多余的位数将被切断。此时,精度已经丧失。此外,由于浮点数小数位的限制,切断的二进制数字将转换为十进制.30000000000000004。

6.什么是Biglnt?


Biglnt当整数值大于时,是一种新的数据类型Number当数据类型支持范围时。这种数据类型允许我们安全地操作大整数,表示高分辨率的时间戳,并使用大整数id,等等,不需要使用库。

7.为什么需要Biglnt?

在JS所有的数字都以双精度64位浮点格式表示,这会带来什么问题?
这导致lS中的Number它不能准确地表示非常大的整数,它四舍五入非常大的整数,确切地说,JS中的Number类型只能安全地表示-9007192544091(-(253-1)和9007192544091 ((2^53-1),任何超出此范围的整数值都可能失去精度。

console.log(999999999999999);// =>10000000000000000 

同时也会出现一些安全问题:

9007199254740992 === 9007199254740993;// => true 居然是true! 

8.如何创建和使用Biglnt?

要创建Biglnt,只需在数字末尾添加n即可。

console.log(9007199254740995n );// ->9007199254740995n conso1e.log(9007199254740995 );// ->9007199254740996

另一种创建BigInt的方法是用Biglnt()构造函数,

BigInt("9007199254740995");//-> 9007199254740995n 

简单使用如下:

10n   20n; // ->30n 10n - 20n; // -> -10n  10n;      //-> TypeError: Cannot convert a BigInt value to a number -10n;      //-> -10n 10n * 20n; // -> 200n 20n / 10n; //-> 2n 23n % 10n; //-> 3n 10n ** 3n; //-> 1000n   const x = 10n;   x;       //-> 11n -—x;       //-> 9n console.log(typeof x);  //"bigint"

值得警惕的是:


1) BigInt不支持一元加号运算符,这可能是某些程序可能依赖于+始终生成Number的不变量,或者抛出异常。另外,更改+的行为也会破坏asm.js代码。
2)由于隐式类型转换可能会丢失信息,因此不允许使用bigint和Number混合操作之间。当混合使用大整数和浮点数时,结果值可能不起作用Biglnt或Number精确表示。

10   10n;// -> TypeError 

3)不能将BigInt传递给Web api和内置的JS这些函数需要一个函数Number类型的数字。尝试这样做会报TypeError错误。

Math.max(2n,4n,6n) ;// -> TypeError 

4)当Boolean类型与BigInt当类型相遇时,BigInt处理方法及Number换句话说,话说,只要不是on,Biglnt就被视为truthy的值。

if(0n){   //条件判断为false } if(3n){   //条件为true }

5)元素都为BigInt可以进行数组sort。
6) BigInt位置运算可以正常进行,如 |、&、<<、>>和^

浏览器兼容性

a0444eca0e09542c451df3425f038574.png


好了,本期到此为止。如果觉得有用,可以给三连吗?当然,老规矩,福利图:

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章