如何避免首先使用 parseFloat/Int、number() 和 JavaScript?
How do I avoid needing to use parseFloat/Int, number() in the first place with JavaScript?
添加一些未引用的对象值时,它有时会连接这些值而不是实际添加它们,因此我在这两个值周围使用 parseInt 或 parseFloat 函数。
示例:
var testobj =
{
'test1':
{
'rect': {x:100, y:0, w:0, h:0}
},
'line2':
{
'rect': {x:0, y:0, w:200, h:0}
}
}
var result = parseFloat(testobj['test1'].rect.x) + parseFloat(testObj['test2'].rect.w);
console.log(result); // will give me 300
result = testobj['test1'].rect.x + testObj['test2'].rect.w;
console.log(result); // will give me 100300
我发现我需要使用 parseFloat 真的很烦人。有办法解决这个问题吗?
变量前加+
可以强制变量变成数字,看下面的例子。
var testobj = {
'test1':
{
'rect': {x:'100', y:'0', w:'0', h:'0'}
},
'line2':
{
'rect': {x:'0', y:'0', w:'200', h:'0'}
}
}
var result = +(testobj['test1'].rect.x) + +(testobj['line2'].rect.w);
console.log(result); // will give me 300
result = testobj['test1'].rect.x + testobj['line2'].rect.w;
console.log(result); // will give me 100300
var a = '11';
var b = '22';
var c = '1.25';
var d = '2.25';
console.log('"11" + "22" = ' + a + b);
console.log('+"11" + +"22" = ' + (+a + +b));
console.log(+"11" + +"22");
console.log(c + d);
console.log(+c + +d);
你可以写一个小函数,将一个obj的所有字符串化int/float键转换成int/float,这样你就不需要在计算时重复采取额外的措施。
function parseNumKeys(obj) {
if( typeof obj == "object" ) {
for(var key in obj){
var num = parseFloat(obj[key]);
isNaN(num)? parseNumKeys(obj[key]) : obj[key] = num;
}
}
}
将您的对象传递给上述函数:
var testobj = {
'test1':
{
'rect': {x:'100', y:'0', w:'0', h:'0'}
},
'line2':
{
'rect': {x:'0', y:'0', w:'200', h:'0'}
}
}
console.log("before parseNumKeys called: \n", testobj);
parseNumKeys(testobj);
console.log("after parseNumKeys called: \n", testobj);
// before parseNumKeys called:
// { test1: { rect: { x: '100', y: '0', w: '0', h: '0' } },
// line2: { rect: { x: '0', y: '0', w: '200', h: '0' } } }
// after parseNumKeys called:
// { test1: { rect: { x: 100, y: 0, w: 0, h: 0 } },
// line2: { rect: { x: 0, y: 0, w: 200, h: 0 } } }
现在,result = testobj['test1'].rect.x + testobj['line2'].rect.w;
将给出 300 而不是 100300,无需额外处理。
添加一些未引用的对象值时,它有时会连接这些值而不是实际添加它们,因此我在这两个值周围使用 parseInt 或 parseFloat 函数。
示例:
var testobj =
{
'test1':
{
'rect': {x:100, y:0, w:0, h:0}
},
'line2':
{
'rect': {x:0, y:0, w:200, h:0}
}
}
var result = parseFloat(testobj['test1'].rect.x) + parseFloat(testObj['test2'].rect.w);
console.log(result); // will give me 300
result = testobj['test1'].rect.x + testObj['test2'].rect.w;
console.log(result); // will give me 100300
我发现我需要使用 parseFloat 真的很烦人。有办法解决这个问题吗?
变量前加+
可以强制变量变成数字,看下面的例子。
var testobj = {
'test1':
{
'rect': {x:'100', y:'0', w:'0', h:'0'}
},
'line2':
{
'rect': {x:'0', y:'0', w:'200', h:'0'}
}
}
var result = +(testobj['test1'].rect.x) + +(testobj['line2'].rect.w);
console.log(result); // will give me 300
result = testobj['test1'].rect.x + testobj['line2'].rect.w;
console.log(result); // will give me 100300
var a = '11';
var b = '22';
var c = '1.25';
var d = '2.25';
console.log('"11" + "22" = ' + a + b);
console.log('+"11" + +"22" = ' + (+a + +b));
console.log(+"11" + +"22");
console.log(c + d);
console.log(+c + +d);
你可以写一个小函数,将一个obj的所有字符串化int/float键转换成int/float,这样你就不需要在计算时重复采取额外的措施。
function parseNumKeys(obj) {
if( typeof obj == "object" ) {
for(var key in obj){
var num = parseFloat(obj[key]);
isNaN(num)? parseNumKeys(obj[key]) : obj[key] = num;
}
}
}
将您的对象传递给上述函数:
var testobj = {
'test1':
{
'rect': {x:'100', y:'0', w:'0', h:'0'}
},
'line2':
{
'rect': {x:'0', y:'0', w:'200', h:'0'}
}
}
console.log("before parseNumKeys called: \n", testobj);
parseNumKeys(testobj);
console.log("after parseNumKeys called: \n", testobj);
// before parseNumKeys called:
// { test1: { rect: { x: '100', y: '0', w: '0', h: '0' } },
// line2: { rect: { x: '0', y: '0', w: '200', h: '0' } } }
// after parseNumKeys called:
// { test1: { rect: { x: 100, y: 0, w: 0, h: 0 } },
// line2: { rect: { x: 0, y: 0, w: 200, h: 0 } } }
现在,result = testobj['test1'].rect.x + testobj['line2'].rect.w;
将给出 300 而不是 100300,无需额外处理。