JavaScript基础知识总结(1)
时间:2023-02-14 02:00:00
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位置运算可以正常进行,如 |、&、<<、>>和^
浏览器兼容性
好了,本期到此为止。如果觉得有用,可以给三连吗?当然,老规矩,福利图: