
获得徽章 8
- #每天一个知识点# JOSN.stringify() 深拷贝有什么问题?
1. undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略
2. Date 日期调用了 toJSON() 将其转换为了 string 字符串(Date.toISOString()),因此会被当做字符串处理。
3. NaN 和 Infinity 格式的数值及 null 都会被当做 null。
4. 其他类型的对象,包括 Map/Set/WeakMap/WeakSet,仅会序列化可枚举的属性。
5. 对包含循环引用的对象(对象之间相互引用,形成无限循环)执行此方法,会抛出错误。展开评论点赞 - #每天一个知识点#
对于 == 来说, 如果对比双方的类型不⼀样的话,就会进行类型转换
假如我们需要对比 x 和 y 是否相同,就会进行如下判断流程
1. 首先会判断两者类型是否相同 。相同的话就是比大小了
2. 类型不相同的话,那么就会进行类型转换
3. 会先判断是否在对比 null 和 undefined , 是的话就会返回true
4. 判断两者类型是否为 string 和 number , 是的话就会将字符串转换为number
5. 判断其中⼀方是否为 boolean , 是的话就会把 boolean 转为number 再进行判断
6. 判断其中⼀方是否为 object 且另⼀方为 string 、 number 或者symbol ,是的话就会把 object 转为原始类型再进行判断展开赞过11 - #每天一个知识点#
为什么0.1+0.2 ! == 0.3 ?
计算机是通过二进制的方式存储数据的,所以计算机计算0.1+0.2的时候,实际上是计算的两个数的二进制的和。0.1的二进制是0.0001100110011001100...(1100循环),0.2的二进制是0.00110011001100...(1100循环),这两个数的二进制都是无限循环的数。
那JavaScript是如何处理无限循环的二进制小数呢?
一般我们认为数字包括整数和小数,但是在 JavaScript 中只有一种数字类型:Number,它的实现遵循IEEE 754标准,使用64位固定长度来表示,也就是标准的double双精度浮点数。在二进制科学表示法中,双精度浮点数的小数部分最多只能保留52位,再加上前面的1,其实就是保留53位有效数字,剩余的需要舍去,遵从“0舍1入”的原则。
根据这个原则,0.1和0.2的二进制数相加,再转化为十进制数就是:0.30000000000000004。展开评论点赞 - #每天一个知识点#
什么是 XSS 攻击?
XSS 攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等。
XSS 的本质是因为网站没有对恶意代码进行过滤,与正常的代码混合在一起了,浏览器没有办法分辨哪些脚本是可信的,从而导致了恶意代码的执行。
攻击者可以通过这种攻击方式可以进行以下操作:
1.获取页面的数据,如DOM、cookie、localStorage;
2.DOS攻击,发送合理请求,占用服务器资源,从而使用户无法访问服务器;
3.破坏页面结构;
4.流量劫持(将链接指向某网站);展开评论点赞