默认情况下是javascript变量字符串?

时间:2016-07-06 05:07:26

标签: javascript jquery

我为我的汽车创建了一个ZoomIn图标。

function carZoomCenter(x, y) {

    console.log(typeof x);   // return string

    x = Number(x);
    y = Number(y);

    console.log(typeof x);  // return number

    var iconFeature = new ol.Feature({
        geometry: new
          ol.geom.Point(ol.proj.transform([x, y], 'EPSG:4326', 'EPSG:3857')),
        name: 'Null Island ',              ^^^^ fail if are string
        population: 4000,
        rainfall: 500
    });
}

我从点击的事件中获取数据

Number()

但我的功能不起作用,因为将x和y视为字符串。

{{1}}

添加{{1}}后,功能正常。我知道javascript不会声明类型。但我想知道这是否是这样做的方式,或者我是否遗漏了什么。

3 个答案:

答案 0 :(得分:4)

不,默认情况下,javascript变量未定义,其类型可以即时更改。

var x; 
console.log(x === undefined);
x = "6";
console.log(typeof x === 'string');
x = 7;
console.log(typeof x === 'number');

您获取字符串的原因是因为您有大型浮点数,而jquery的数据方法无法将它们转换为数字。

检查this fiddle以了解相关信息。 您可能希望通过限制浮点后的位数来解决此问题。

答案 1 :(得分:1)

在这种情况下,值将是一个字符串,因为{1}} jQuery方法在DOM元素上调用JavaScript data()方法。 HTML元素的属性值是字符串值,并以字符串形式返回。

您还可以查看JavaScript的getAttribute()parseFloat()方法,以强制转换为数字。

parseInt()

JavaScript不会将字符串默认为字符串。它确实支持类型,但除非您需要它,否则它也不会强制执行它们。 JavaScript会尝试通过推断您想要的内容来强制类型。像这样:

var x = parseFloat($carCenterId.data("x"));
var y = parseFloat($carCenterId.data("y"));

JavaScript会将字符串强制转换为数字,y将是结果。同样:

var x = "2";
var y = x * 2;
console.log(y === 4); //logs true

类型似乎非常流畅,如果你不小心,JavaScript会以意想不到的方式强制它们。如果您的逻辑需要将变量作为特定类型,则最好将它们强制为您需要的类型。

答案 2 :(得分:0)

默认情况下,JavaScript变量设置为undefined:

var jvar;
console.log(jvar); // return undefined

在您的实例中,您使用JQuery来获取元素并从该元素中提取数据属性。默认情况下,JQuery元素的属性是字符串或对象。有关详细信息,请参阅JQuery docs about the data method