Javascript:有一个数字,数组推送给我 NaN
Javascript: having a number, with array push gives me NaN
我真的很奇怪 bug/problem...IE 让我很伤心...我不明白我做错了什么...有问题的 IE 是 IE11...
所以,基本上我有一个日期字符串,IE1 toLocaleDateString 给我 (08/03/2017)....我需要一个字符串 8/3/2017(Chrome 如何给我 fe) ....所以我要走很长的路,只是为了确保我做的一切都正确...
let date = new Date();
let dateStr = date.toLocaleDateString();
console.log("Date string:", dateStr);
let splitChar = '/';
let tokens = dateStr.split(splitChar);
let result = [];
for( let token of tokens){
console.log('token', token);
let t = token.replace(/\b(?:0*(0\.\d+)|0+)/g, '');
let n;
n = parseInt(t, 10);
console.log('----- stripped', t);
console.log('----- number', n);
if(typeof n === 'number'){
result.push(n);
console.log('----- ARRAY', result.toString());
}
};
LOG (IE11):
Date string: 08/03/2017
token 08
----- stripped 8
----- number NaN
----- ARRAY NaN
token 03
----- stripped 3
----- number NaN
----- ARRAY NaN,NaN
token 2017
----- stripped 2017
----- number NaN
----- ARRAY NaN,NaN,NaN
日志(Chrome40)
Date string: 3/8/2017
token 3
----- stripped 3
----- number 3
----- ARRAY 3
token 8
----- stripped 8
----- number 8
----- ARRAY 3,8
token 2017
----- stripped 2017
----- number 2017
----- ARRAY 3,8,2017
所以除了 IE 和 Chrome 以不同的标准解析血腥月份...(IE 美国和 Chrome 欧洲)..
出于某种原因,IE(11) 中的 parseInt(t, 10) 给出了 NaN...尽管 t 显然是一个数字字符串....
如果我自己输入字符串...如
let dateStr = "08/03/2017";
它适用于两种浏览器....
我认为不起作用的唯一合理原因是因为 IE 不会 return 实际数字字符,但其他一些看起来像数字但实际上不是
的 unicode 字符
编辑 ======================================= ======
我正在检查 return 从 toLocaleDateString()
编辑的字符的 ascii 码
并且正如所怀疑的那样,IE 不提供实际的正常字符:
let ascii = function(a) { return a.charCodeAt(0); }
let date = new Date();
let dateStr = date.toLocaleDateString();
console.log("Date string", dateStr);
let splitChar = '/';
let tokens = dateStr.split(splitChar);
let result = [];
for( let token of tokens){
console.log('token', token);
let t = token.replace(/\b(?:0*(0\.\d+)|0+)/g, '');
let n;
n = parseInt(t, 10);
console.log('----- stripped', t);
console.log('charCode (t):', t.split('').map(ascii));
console.log('----- number', n);
if(typeof n === 'number'){
result.push(n);
console.log('----- ARRAY', result.toString());
}
};
IE 给出:
Date string 08/03/2017
token 08
----- stripped 8
charCode (t): 8206,56,8206
"charCode (t):"
[
0: 8206,
1: 56,
2: 8206,
length: 3
]
----- number NaN
----- ARRAY NaN
token 03
----- stripped 3
charCode (t): 8206,51,8206
"charCode (t):"
[
0: 8206,
1: 51,
2: 8206,
length: 3
]
----- number NaN
----- ARRAY NaN,NaN
token 2017
----- stripped 2017
charCode (t): 8206,50,48,49,55
"charCode (t):"
[
0: 8206,
1: 50,
2: 48,
3: 49,
4: 55,
length: 5
]
----- number NaN
----- ARRAY NaN,NaN,NaN
而 Chromne 给出正常的 ASCII 码:
Date string 3/8/2017
token 3
----- stripped 3
charCode (t): [51]
----- number 3
----- ARRAY 3
token 8
----- stripped 8
charCode (t): [56]
----- number 8
----- ARRAY 3,8
token 2017
----- stripped 2017
charCode (t): [50, 48, 49, 55]
----- number 2017
----- ARRAY 3,8,2017
希望对大家有所帮助
尝试使用可以将每个日期部分作为单独参数的构造函数创建 Date
对象。
正如我的附录中所述,这是一个 IE 问题,它使用不同的 unicode 字符来表示日期字符串...所以 isNumeric 或 toInt 不起作用
我真的很奇怪 bug/problem...IE 让我很伤心...我不明白我做错了什么...有问题的 IE 是 IE11...
所以,基本上我有一个日期字符串,IE1 toLocaleDateString 给我 (08/03/2017)....我需要一个字符串 8/3/2017(Chrome 如何给我 fe) ....所以我要走很长的路,只是为了确保我做的一切都正确...
let date = new Date();
let dateStr = date.toLocaleDateString();
console.log("Date string:", dateStr);
let splitChar = '/';
let tokens = dateStr.split(splitChar);
let result = [];
for( let token of tokens){
console.log('token', token);
let t = token.replace(/\b(?:0*(0\.\d+)|0+)/g, '');
let n;
n = parseInt(t, 10);
console.log('----- stripped', t);
console.log('----- number', n);
if(typeof n === 'number'){
result.push(n);
console.log('----- ARRAY', result.toString());
}
};
LOG (IE11):
Date string: 08/03/2017
token 08
----- stripped 8
----- number NaN
----- ARRAY NaN
token 03
----- stripped 3
----- number NaN
----- ARRAY NaN,NaN
token 2017
----- stripped 2017
----- number NaN
----- ARRAY NaN,NaN,NaN
日志(Chrome40)
Date string: 3/8/2017
token 3
----- stripped 3
----- number 3
----- ARRAY 3
token 8
----- stripped 8
----- number 8
----- ARRAY 3,8
token 2017
----- stripped 2017
----- number 2017
----- ARRAY 3,8,2017
所以除了 IE 和 Chrome 以不同的标准解析血腥月份...(IE 美国和 Chrome 欧洲)..
出于某种原因,IE(11) 中的 parseInt(t, 10) 给出了 NaN...尽管 t 显然是一个数字字符串....
如果我自己输入字符串...如
let dateStr = "08/03/2017";
它适用于两种浏览器....
我认为不起作用的唯一合理原因是因为 IE 不会 return 实际数字字符,但其他一些看起来像数字但实际上不是
的 unicode 字符编辑 ======================================= ======
我正在检查 return 从 toLocaleDateString()
编辑的字符的 ascii 码并且正如所怀疑的那样,IE 不提供实际的正常字符:
let ascii = function(a) { return a.charCodeAt(0); }
let date = new Date();
let dateStr = date.toLocaleDateString();
console.log("Date string", dateStr);
let splitChar = '/';
let tokens = dateStr.split(splitChar);
let result = [];
for( let token of tokens){
console.log('token', token);
let t = token.replace(/\b(?:0*(0\.\d+)|0+)/g, '');
let n;
n = parseInt(t, 10);
console.log('----- stripped', t);
console.log('charCode (t):', t.split('').map(ascii));
console.log('----- number', n);
if(typeof n === 'number'){
result.push(n);
console.log('----- ARRAY', result.toString());
}
};
IE 给出:
Date string 08/03/2017
token 08
----- stripped 8
charCode (t): 8206,56,8206
"charCode (t):"
[
0: 8206,
1: 56,
2: 8206,
length: 3
]
----- number NaN
----- ARRAY NaN
token 03
----- stripped 3
charCode (t): 8206,51,8206
"charCode (t):"
[
0: 8206,
1: 51,
2: 8206,
length: 3
]
----- number NaN
----- ARRAY NaN,NaN
token 2017
----- stripped 2017
charCode (t): 8206,50,48,49,55
"charCode (t):"
[
0: 8206,
1: 50,
2: 48,
3: 49,
4: 55,
length: 5
]
----- number NaN
----- ARRAY NaN,NaN,NaN
而 Chromne 给出正常的 ASCII 码:
Date string 3/8/2017
token 3
----- stripped 3
charCode (t): [51]
----- number 3
----- ARRAY 3
token 8
----- stripped 8
charCode (t): [56]
----- number 8
----- ARRAY 3,8
token 2017
----- stripped 2017
charCode (t): [50, 48, 49, 55]
----- number 2017
----- ARRAY 3,8,2017
希望对大家有所帮助
尝试使用可以将每个日期部分作为单独参数的构造函数创建 Date
对象。
正如我的附录中所述,这是一个 IE 问题,它使用不同的 unicode 字符来表示日期字符串...所以 isNumeric 或 toInt 不起作用