什么时候字符串不是字符串?什么时候没有include()方法?

时间:2015-03-17 01:40:59

标签: javascript string coffeescript

我正在尝试编写一个简单的javascript(well coffeescript)测试并且有一些令人困惑的事情:

dclib.appendVarToUrl = (base, k, v) ->
  check base, String
  console.log("base is a:", typeof(base))
  if base.includes("?")
     ... 

// called with
dclib.appendVarToUrl("some/url", "score", 5)

给了我:

base is a: string
TypeError: Object some/url has no method 'includes'

那么为什么String没有.includes()方法呢? 这个coffeescript是以一种奇怪的方式包裹着一个物体吗?

3 个答案:

答案 0 :(得分:1)

啊哈,看起来我的浏览器支持这个作为ES6方法,但是我使用的节点版本并没有。我在服务器上运行单元测试,而方法在客户端运行正常。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes

  

这是一项实验技术,是ECMAScript 6(Harmony)提案的一部分。

答案 1 :(得分:0)

According to Mozilla确实没有。您可能正在寻找.indexOf

答案 2 :(得分:0)

根据规范.includes()是ECMAScript 6 JavaScript版本的一部分。因此,许多平台仍然不支持它。

您可以使用等同且属于ECMAScript 1 JavaScript版本的.indexOf()!=-1替换。根据规范.indexOf(),当它找不到特定的字符串时返回-1。

因此a)和b)是等价的

a)ECMAScript 6

var str = "Hello world";

if (str.includes("world")){
  return true
}

b)ECMAScript 1

var str = "Hello world";

if (str.indexOf("world")!==-1){
  return true
}