我有一个对象jsonRes[0]
,其中包含需要根据条件删除的值。以下内容适用于删除null
,缺少值以及字符串化对象中等于零的值:
function replacer(key, value) {
// Filtering out properties
if (value === null || value === 0 || value === "") {
return undefined;
}
return value;
}
JSON.stringify(jsonRes[0], replacer, "\t")
但是,当我使用includes
方法添加条件时,收到错误:
function replacer(key, value) {
// Filtering out properties
if (value === null || value === 0 || value === "" || value.includes("$")) {
return undefined;
}
return value;
}
Uncaught TypeError: value.includes is not a function
为什么会这样,是否有解决方法?
答案 0 :(得分:11)
您可以使用String.indexOf()
代替String.includes
,因为它在ES6中可用,在IE中根本不受支持。
typeof value == "string" && value.indexOf('$') > -1
另请注意,如果value
不是字符串类型,则仍然会引发错误boolean
,Number
不是该方法。您可以使用typeof
来验证value
是否为字符串。
答案 1 :(得分:2)
.includes()
API是String
和Array
数据类型的一部分。
所以错误试图告诉你的是变量value
的值,例如整数或对象,没有属性.includes
。
你可以做像
这样的检查typeof a_string === 'string'
an_array instanceof Array
在.includes()
api之前阻止这种情况。
显然,由于您拥有的支票数量,这会使您的if语句变得相当丑陋。
根据你的代码编写方式,我怀疑你对检查“String”而不是数组更感兴趣。所以 becareful 数组。如果是数组,您的代码可能无法正常工作。
无论如何,这里是您的代码的折射版本。
function replacer(key, value) {
// Filtering out properties
if (!value || typeof value === "string" && value.includes("$")) {
return undefined;
}
return value;
}
console.log("NULL returns:" + replacer('test', null));
console.log("$Test returns:" + replacer('test', '$test'));
console.log("Blah returns:" + replacer('test', 'Blah'));
答案 2 :(得分:1)
还有一种可能性:也许你的value
不是字符串类型的对象。
(typeof(value) == "string" && value.includes("$"))
答案 3 :(得分:1)
我通过附加“ .toString();”解决了这个错误,该错误是在将“ includes”应用于“ window.location”值时遇到的。
var requestUrl = window.location.toString();
if(requestUrl.includes(urlBase +“#”)){ ...
答案 4 :(得分:0)
我实际上不确定名为value
的变量的类型是什么,但无论如何,Array.prototype.includes
和String.prototype.includes
仅在ES6中可用。您需要使用babel-polyfill
或任何其他捆绑模块,例如rollup.js
,webpack
与babel或类似的东西来使用includes
功能。