填一下坑!!!
关于let和var 先看两组代码:
if (false) {
var i = 0;
}
alert(i);//undefind
if (false) {
let i = 0;
}
alert(i);// Uncaught ReferenceError: i is not defined
关于深克隆
function deepClone(arr) {
let result = (arr instanceof Array) ? [] : {};
for (let i in arr) {
result[i] = (typeof arr[i] === 'object') ? deepClone(arr[i]) : arr[i];
}
return result
}
//test
let arr = [1, 2, 3, {1: 'wei', 2: "liu", 3: 'wang'}, [4, 5, 6]];
deepClone(arr);// [ 1,2,3,{ '1': 'wei', '2': 'liu', '3': 'wang },[ 4, 5, 6 ] ]
字符串包含
先用这个吧,明天kmp算法实现补上去。
function isContain(str1, str2) {
if (str1.indexOf(str2) === -1) {
return false;
} else {
return true;
}
}
let str1 = 'wejuan';
let str2 = 'juan';
console.log(isContain(str1, str2));//true
数组的判断
let log = console.log.bind(console);
let arr = [];
//1.es5中的isArray方法
log(Array.isArray(arr));
//2.在任何值上调用Object原生的toString()方法,都会返回一个[Object nativeConstructorName]格式的字符串
function isArray(value) {
return Object.prototype.toString.call(value) === '[object Array]'
}
log(isArray(arr));
//也可以用此方法来检测函数,正则表达式,原生js对象
function isFunction(value) {
return Object.prototype.toString.call(value) === '[object Function]'
}
log(isFunction(isArray));
//object的toString方法不能检测非原生构造函数的构造函数名
//3.如果arr和Array存在于同个全局作用域,我们也可以用instanceof判断
log(arr instanceof Array);
//4.typeof判断,用它判断Regexp可能会出问题。
log(typeof RegExp === 'function');
驼峰形式的字符串与下划线形式字符串转换
//驼峰转下划线
let str='qiuJuan';
str=str.replace(/([A-Z])/g,"_$1").toLowerCase();
console.log(str);//qiu_juan
//下划线转驼峰
let result = str.split('_');
let newStr = result[0];
for (let i = 1; i < result.length; i++) {
newStr=newStr + result[i].slice(0, 1).toUpperCase() + result[i].slice(1);
}
console.log(newStr);//qiuJuan
typeof函数的封装
function type(target) {
let type=typeof (target);
let template={
'[object Array]':'array',
'[object Object]':'object',
'[object Number]': 'number-object',
'[object Boolean]':'boolean-object',
'[object String]':'string-object'
}
if (target===null) {
return 'null'
}else if(type=='object'){
let str=Object.prototype.toString.call(target)
return template[str]
}else{
return type
}
}
console.log(type('wei'))//string
console.log(type({'first':'wei','second':'liu'}))//object