关于低版本兼容:JSON.stringify() 的模拟
- 未处理:
function fn(val) {
if (val === undefined) return false;
return true;
}
fn(); // false
- 处理后:
function fn(val) {
var check = [];
for (var i = 0; i<arguments.length;i++) {
check.push(arguments[i]);
}
if (JSON.stringify(check) === '[]') return;
if (val === undefined) return false;
return true;
}
fn(); // undefined
fn(undefined); // false
Array.prototype.contains = function(val) {
var hash = {}, // 用于存储数组元素
check = [], // 用于限制空值被转为undefined
item = '', // 用于存储元素的字符串
args = arguments;
// 转为字符串
var getStr = function(ele) {
// ({}).toString.call() === Object.prototype.toString.call()
if (({}).toString.call(ele) === '[object Object]' // 对象
|| ({}).toString.call(ele) === '[object Array]') { // 数组
ele = JSON.stringify(ele).replace(/"/g,''); // 去掉双引号
} else {
ele += '';
}
return ele;
}
// 处理传入的空值
;(function(curArr, newArr) {
for (var i = 0; i < curArr.length; i++) {
newArr.push(curArr[i]);
}
})(args, check);
// 空值返回不执行
if (JSON.stringify(check) === '[]') return;
// 将传入的值,转为字符串
val = getStr(val);
// 将数组元素,转为字符串
for (var i = 0; i < this.length; i++) {
item = getStr(this[i]);
hash[item] = 1; // 填充进对象,主要取key,值随意
}
// console.log(hash); // 查看 hash
// 只允许 in 遍历自身属性
if (hash.hasOwnProperty(val)) {
if (val in hash) return true;
}
return false;
}