2017-07-18 38 views
0

我使用特殊字符ↂ作爲JS變量名稱來命名空間我的框架。 SyntaxError: Invalid character '\u8578':應該根據雙方ES5和ES6的((http://www.fileformat.info/info/unicode/category/Nl/list.htm)它是Unicode組「數字,字母」)有效的特殊字符ↂ作爲變量名稱 - Safari/iOS上的錯誤

在iOS上的Safari然而,這給出了錯誤的規格是有效的。因爲該字符的代碼似乎是一箇中國字這似乎很奇怪:http://www.fileformat.info/info/unicode/char/8578/index.htm

所以下面的代碼片段不會在iOS上的Safari工作(沒有測試桌面Safari瀏覽器)

<script> 
 
    var ↂ = 5; 
 
    alert(ↂ); 
 
</script>

我試圖通過在劇本標籤上設置一些charset="..."的值,但這並沒有幫助

  1. 爲什麼iOS Safari不接受ↂ即使在ES5中也應該有效?
  2. 有沒有辦法使用ↂ而不會出錯?

請像「這是不好的做法在JS使用特殊字符」不沒有提出的建議作出迴應。我知道你的意見,請保留自己

+0

什麼是您使用腳本標記所在的HTML文檔發送的HTTP標頭的編碼?有沒有「charset」元首? –

+0

Hacktisch

+0

而且行爲與使用GZIP編碼的響應標頭相同且沒有GZIP – Hacktisch

回答

1

我會回答我自己的問題。顯然,並非所有現代瀏覽器都遵循ES5/ES6規範允許的字符。我寫了一個有用的代碼片段,會告訴你哪些變量名在當前瀏覽器中運行:

var allowed = ''; 
 

 
function check() { 
 
    var char = String.fromCharCode(i); 
 
    if (char.length) { 
 
    try { 
 
     eval("var " + char + "=1;"); 
 
     allowed += char + ' '; 
 
    } catch (e) {} 
 
    } 
 
} 
 
for (var i = 0; i <= 15000; i++) { 
 
    check(i); 
 
} 
 
document.body.innerHTML = allowed;

兼談的jsfiddle:https://jsfiddle.net/9539cc7q/

提高最高字符代碼(現在的15000),然後代碼將運行更長

在Safari上運行時,我們確實可以看到ↂ符號不允許d。