数据类型判断1.判断NaNfunctionisNaN(val){//Number.isNaN是es6提出的,以前的可能没有这个功能,所以先判断if(Number.isNaN){returnNumber.isNaN(val);}//NaN是唯一的非自反returnval!==val;}2.判断数函数isNumeric(val){return/^\d+(\.\d+)?$/.test(val);}正则解释:^匹配输入字符串的开头\d匹配一个数字字符,相当于[0-9]+匹配前一个子表达式一次或多次\。匹配字符“.”?匹配前面的单词表达式$与输入字符串的末尾匹配零次或多次,因此isNumeric(1.)和isNumeric(.1)都为真。疑惑:1.有一个很奇怪的现象,字符串'1'的返回值也为真,/^[0-9]+$/.test('1')也为真。3.判断日期函数isDate(val){return(Object.prototype.toString.call(val)==='[objectDate]'&&!isNaN(val.getTime()));}数据深拷贝1.深copyconst{hasOwnProperty}=Object.prototype;//深拷贝函数deepClone(obj){if(Array.isArray(obj)){returnobj.map((item)=>deepClone(item));}if(typeofobj==='object'){//对象副本returndeepAssign({},obj);}returnobj;}//对象复制函数deepAssign(to,from){Object.keys(from).forEach((key)=>{//键值对复制assignKey(to,from,key);});returnto;}//键值对复制函数assignKey(to,from,key){constval=from[key];//是否为空if(!isDef(val)){return;}//是否是对象属性if(!hasOwnProperty.call(to,key)||!isObject(val)){to[key]=val;}else{to[key]=deepAssign(Object(to[key]),from[key]);}}//是否为空functionisDef(val){returnval!==undefined&&val!==null;}//是否为对象functionisObject(val){returnval!==null&&typeofval==='对象';}
