在函数中使用.includes方法

时间:2017-01-24 05:40:28

标签: javascript

我有一个对象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

为什么会这样,是否有解决方法?

5 个答案:

答案 0 :(得分:11)

您可以使用String.indexOf()代替String.includes,因为它在ES6中可用,在IE中根本不受支持。

typeof value == "string" && value.indexOf('$') > -1

另请注意,如果value不是字符串类型,则仍然会引发错误booleanNumber不是该方法。您可以使用typeof来验证value是否为字符串。

答案 1 :(得分:2)

.includes() API是StringArray数据类型的一部分。

所以错误试图告诉你的是变量value的值,例如整数或对象,没有属性.includes

你可以做像

这样的检查
  1. typeof a_string === 'string'
  2. an_array instanceof Array
  3. .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.includesString.prototype.includes仅在ES6中可用。您需要使用babel-polyfill或任何其他捆绑模块,例如rollup.jswebpack与babel或类似的东西来使用includes功能。