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

默认情况下javascript变量是字符串吗?,javascript,jquery,Javascript,Jquery,我正在为我的汽车创建一个缩放图标 <img src="~/Content/center-icon.png" id="center-@car.Car_ID" data-x=@car.X data-y=@car.Y /> ^^ ^^ float 但我的函数不起作用,因为它将x和y视为字符串 function carZoomCenter

我正在为我的汽车创建一个缩放图标

<img src="~/Content/center-icon.png" id="center-@car.Car_ID" data-x=@car.X data-y=@car.Y />
                                                                     ^^         ^^ float
但我的函数不起作用,因为它将x和y视为字符串

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()
后,函数工作正常。我知道javascript不声明类型。但是我想知道是这样做的,还是我遗漏了什么。

在这种情况下,值将是一个字符串,因为在引擎盖下,
data()
jQuery方法正在调用DOM元素上的JavaScript
getAttribute()
方法。HTML元素上的属性值是字符串值,并作为字符串返回

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
    });
}
您还可以查看JavaScript的
parseFloat()
parseInt()
方法,以强制转换为数字

var x = parseFloat($carCenterId.data("x"));
var y = parseFloat($carCenterId.data("y"));
JavaScript不会将内容默认为字符串。它确实支持类型,但除非您愿意,否则它也不会强制执行类型。JavaScript将通过推断您想要什么来强制类型。像这样:

var x = "2";
var y = x * 2;
console.log(y === 4); //logs true
JavaScript会将字符串强制转换为一个数字,结果是y。同样地:

var i = 2;
var k = i + "";
console.log(typeof k === "string"); //logs true 

类型可能看起来非常流畅,如果您不小心,JavaScript可能会以意外的方式强制它们。当逻辑要求变量是特定类型时,最好将其强制为所需的类型。

在这种情况下,值将是字符串,因为在后台,
data()
jQuery方法正在调用DOM元素上的JavaScript
getAttribute()
方法。HTML元素上的属性值是字符串值,并作为字符串返回

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
    });
}
您还可以查看JavaScript的
parseFloat()
parseInt()
方法,以强制转换为数字

var x = parseFloat($carCenterId.data("x"));
var y = parseFloat($carCenterId.data("y"));
JavaScript不会将内容默认为字符串。它确实支持类型,但除非您愿意,否则它也不会强制执行类型。JavaScript将通过推断您想要什么来强制类型。像这样:

var x = "2";
var y = x * 2;
console.log(y === 4); //logs true
JavaScript会将字符串强制转换为一个数字,结果是y。同样地:

var i = 2;
var k = i + "";
console.log(typeof k === "string"); //logs true 

类型可能看起来非常流畅,如果您不小心,JavaScript可能会以意外的方式强制它们。当您的逻辑要求变量为特定类型时,最好将其强制为所需的类型。

否,默认情况下javascript变量未定义,可以动态更改其类型

varx;
console.log(x==未定义);
x=“6”;
log(typeof x=='string');
x=7;

console.log(typeof x=='number')否,默认情况下javascript变量是未定义的,可以动态更改其类型

varx;
console.log(x==未定义);
x=“6”;
log(typeof x=='string');
x=7;

console.log(typeof x=='number')默认情况下,JavaScript变量设置为未定义:

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

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

默认情况下,JavaScript变量设置为未定义:

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

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

否,javascript变量通常不会默认为字符串类型(如您所知,变量没有类型)。
.data()
调用的结果默认情况下可能是字符串值。@Bergi,因此我应该使用
var x=Number($carCenterId.data(“x”)相反?顺便说一句,它们有类型<代码>x的类型
返回字符串或数字。是的,您可以这样做。取决于您是否希望您的
carZoomCenter(x,y)
函数始终接受数字或同时允许字符串。
typeof
返回的是值的类型,而不是变量的类型。变量可以保存任何内容。不,javascript变量通常不会默认为字符串类型(如您所知,变量没有类型)。
.data()
调用的结果默认情况下可能是字符串值。@Bergi,因此我应该使用
var x=Number($carCenterId.data(“x”)相反?顺便说一句,它们有类型<代码>x的类型
返回字符串或数字。是的,您可以这样做。取决于您是否希望您的
carZoomCenter(x,y)
函数始终接受数字或同时允许字符串。
typeof
返回的是值的类型,而不是变量的类型。变量可以容纳任何东西。那么为什么William show类型的sql FIDLE是整数而我的show字符串呢?@JuanCarlosOropeza-我不理解你的问题。什么是威廉的sql小提琴?您需要理解,html属性=字符串。这就是你得到字符串的原因。如果您知道这正是您所期望的,只需将其转换为一个数字即可。“获取字符串的原因是属性是html,而它的值是字符串。”-除了OP使用jQuery的
.data()
方法外,该方法在检索html
数据-
属性时,将字符串转换为数字-但它仅对某些格式执行此操作。@nnnnnn您是对的
120
是一个数字,但
120.123456
是一个字符串。@JuanCarlosOropeza-我已经更新了答案并添加了一把小提琴。看看吧。那么为什么William show类型的sql FIDLE是整数而我的显示字符串呢?@JuanCarlosOropeza-我不明白你的问题。什么是威廉的sql小提琴?您需要理解,html属性=字符串。这就是你得到字符串的原因。如果您知道这正是您所期望的,只需将其转换为一个数字即可。“获取字符串的原因是属性是html,而它的值是字符串。”-除了OP使用jQuery的
.data()
方法外,该方法在检索html
数据-
属性时,将字符串转换为数字-但它仅对某些格式执行此操作。@nnnnnn您是对的
120
是一个数字,但
120.123456
是一个字符串。@JuanCarlosOropeza-我已经更新了答案并添加了一个fid