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 不起作用