阿尔卑斯丶
圣骑士
圣骑士
  • 最后登录2022-01-08
  • 发帖数51
  • 社区居民
  • 原创写手
阅读:91回复:0

[javascript]JavaScript类型

楼主#
更多 发布于:2022-01-04 15:53
1、为什么有的编程规范需要我们使用void 0 代替undefined?
答:因为JavaScript的代码undefined是一个变量而非一个关键字,实际上我么用到的undefined是全局对象window上的一个属性,所以为了避免我们无意中的篡改,建议使用void 0 来获取undefined值。
2、String是否有最大长度?
答:String是有最大长度的,String的最大长度是2^53-1,但是这个所谓的长度并非是我们理解中你的字符数。因为String的意义并非字符串,而是字符串的UTF16编码,我们字符串的操作charAt、charCodeAt、length等方法针对的都是UTF16编码。
3、JavaScript中的值能改变吗?
答:JavaScript中的值是不可变的。
4、Number类型表示什么?
答:Number类型表示我们通常意义上的“数字”,这个数字大致对应数学中的有理数。
5、值得注意的是,JavaScript中是有 +0 和 -0的,在加法类运算中他们是没有区别的,但是在除法的场合需要特别留意。忘记检测除以 -0 而得到负无穷大的情况经常会导致错误。
6、如何区分 +0 和 -0 呢?
答:区分 +0 和 -0的方式是1/x 是infinity还是 -infinity。
7、为什么0.1 + 0.2 == 0.3在JavaScript中是不成立的?
答:因为这是浮点数的精度问题导致的,Number运算会被转换成二进制进行运算,然后再转换为十进制,所以0.1转换后会变成无限循环小数,就出现了浮点数的精度问题。
8、怎么样让 0.1 + 0.2 == 0.3 成立呢?
答:(Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON),这里的EPSILON就是JavaScript提供的最小精度值。检查等式左右两边差的绝对值是否小于最小精度值。错误的不是结论,二十比较的方法。
9、什么是Symbol?为什么要引入Symbol?
答:Symbol是ES6中引入的新类型,他是一切非字符串的对象key的集合。因为ES5中对象的属性名都是字符串,字符串容易造成属性名的冲突。比如你是用了一个他人提供的对象,但是你又想往这个对象中添加新的方法,可是新添加的方法名字可能和现有的冲突。如果有一种机制可以保护属性名是独一无二的就好了。这样就能从根本上解决属性名的冲突,Symbol就是表示独一无二的。
游客


返回顶部

公众号

公众号