我对这个电话有一些疑问,并在javascript中申请

时间:2016-01-06 08:10:48

标签: javascript



function a() {
    console.log(this === 1); //why it is false?
}
a.call(1);




调用或应用函数时,值将被更改。 ORZ !!

3 个答案:

答案 0 :(得分:2)

使用原始值(如字符串,布尔数)更改callbindapply的上下文时,生成的上下文将是框< / em>原语的版本。

如果您将this的值记录到控制台,您会看到1而不是显示Number {[[PrimitiveValue]]: 1},而是显示为===

这个盒装版本是一个对象,因此console.log(Number(this) === 1); 将使用引用相等来进行比较 - 通常数字将按值进行比较,而不是参考。

您可以通过将装箱版本传递给数字构造函数来创建用于比较的安全号码。

 mMap.addMarker(new MarkerOptions().position(latlng1).title("Marker Title1")).showInfoWindow();
    mMap.addMarker(new MarkerOptions().position(latlng2).title("Marker Title2")).showInfoWindow();
    mMap.addMarker(new MarkerOptions().position(latlng3).title("Marker Title3")).showInfoWindow();
    mMap.addMarker(new MarkerOptions().position(latlng4).title("Marker Title4")).showInfoWindow();
    mMap.addMarker(new MarkerOptions().position(latlng5).title("Marker Title15n")).showInfoWindow();

    mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng3));
    mMap.animateCamera(CameraUpdateFactory.zoomTo(7), 3000, null);

答案 1 :(得分:0)

由于原始值是“盒装”(参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply),这一切都有意义。

答案 2 :(得分:0)

您正在使用严格比较(===)并尝试将对象与数字进行比较。虽然显式“1”,但调用函数发送一个对象,因此第四行的“1”是一个对象。如果您尝试使用非严格比较(==),它将评估为true,因为'this'的值将被强制为数字。