【学习笔记】面试集锦【3】

来源:互联网 发布:身份证sql判断 编辑:程序博客网 时间:2024/05/16 14:49

一、实现深拷贝的方法
在对象中不含有function属性时可以直接利用JSON.stringify(obj)将其转换为字符串,然后利用JSON.parse(str)转换为对象。
var obj = JSON.parse(JSON.stringify(objA));
但是当传入的对象中包含有function作为属性值以及原型属性(proto)、undefined作为属性值的属性时,会自动将该属性进行忽略。所以当对象中包含有上诉情况时将不能是应该方式进行深拷贝,需要使用自己写深拷贝的函数。
JSON.stringify(obj,[function(key,val){} | []],indent);
后面的几个参数都是可选的,第二个参数可以是function或者是数组,但是方法是传入的参数将会是遍历时的key,value,如果函数的返回值为undefined,则将会忽略该属性,即结果字符串中将不会包含该属性。如果为数组则只对数组中的指定项进行序列化,返回的字符串中也只包含这些属性。
最后一个参数也是可选,表示转换为字符串时的缩进个数。
Object.assign()方法只能实现浅拷贝

二、JS中的类型转换
1、对于逻辑操作&&和||要注意的地方
对于&&操作
a、当第一个数转换为boolean结果为true时,返回值为后一个参数,否则后第一个参数的值
b、当操作书中包含有null、undefined、NAN中的任意一个时返回则范围结果为其中一个。null && 1 返回结果为null

对于||操作
a、当第一个参数为true时返回第一个参数,如果为false则返回第二个参数
b、当操作书中包含有null、undefined、NAN中的任意一个时返回则范围结果为其中一个。1 || null 返回结果为null
同时注意||的优先级高于&&操作

2、Number和parseInt进行强制类型转换时注意事项
Number转换:
(1)对于字符串:
a、里面包含的是正确的数值(只能是十进制整形或者浮点数),则返回数值,当里面包含非数值时则返回NAN
b、空串返回:0
c、null返回0
d、undefined 返回 0
e、true返回1,false返回0

console.log(Number('hello CSSer!'));console.log(Number('0×8'));console.log(Number(''));console.log(Number('020dd'));console.log(Number('070'));console.log(Number(true));//结果如下:  NaN  NaN  0  NaN  70  1

(2)parseInt转换
parseInt(str,radix)
str也是有几种情况:
(1)忽略字符串前面的空格,直至找到第一个非空字符
(2)如果第一个字符不是数字符号或者负号,返回NaN
(3)如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字符号为止
(4)如果上步解析的结果以0开头,则将其当作八进制来解析;如果以x开头,则将其当作十六进制来解析
(5)如果指定radix参数,则以radix为基数进行解析,radix的进制为2-36,超过这个范围将不能正确解析,0会被当成十进制进行处理。

console.log(parseInt('hello CSSer!'));console.log(Number('0×8'));console.log(parseInt(''));console.log(parseInt('020dd'));console.log(parseInt('070'));console.log(parseInt('22.5'));//结果如下:NaNNaNNaN207022