SORU
4 EKİM 2012, PERŞEMBE


&Quot için hiçbir görünür sebep;Beklenmeyen belirteç YASADIŞI"

Konsol benim: bu JavaScript hatası alıyorum

Yakalanmamış SyntaxError: Unexpected token YASADIŞI

Bu benim kod:

var foo = 'bar';​

Gördüğünüz gibi süper basit. Nasıl bir sözdizimi hatası neden olabilir mi?

CEVAP
4 EKİM 2012, PERŞEMBE


Hata

Kod JavaScript yorumlayıcısı ayrıştırdığında, adet denen kırık alır"". belirteçleri Token olamaz four basic token types biri ayrılabilir zaman etiketli "bu hata atılır." çoğu uygulamaları ve YASADIŞI olur

Örneğin, @ karakter, brace yanlış kıvırcık, bir ayraç, bir haydut ile js dosyası çalıştırmayı denediğinizde ortaya çıkar aynı hata, "akıllı tırnaklar" ve benzeri.

Farklı durumlar çok bu hataya neden olabilir. Ama eğer herhangi bir açık sözdizimi hatası veya geçersiz karakter yok eğer doğru değilse, bir neden olabilirgörünmezgeçersiz karakter. Bu cevap budur.

Ama yasadışı bir şey göremiyorum!

Doğru noktalı virgül sonra kodu görünmez bir karakteri var. Unicode U 200B Zero-width space karakteri ... (bir.k.bir. ZWSP, 7* *HTML varlık). Bu karakter Unexpected token ILLEGAL JavaScript sözdizimi hatası neden olduğu bilinmektedir.

Ve nereden geldi?

Kesin söyleyemem, ama benim bahis jsfiddle. Eğer oradan kodu yapıştırın, çok büyük olasılıkla ya da daha fazla U 200B karakter vardır. Aracı bu karakter, sözcük kaydırma kontrolü için uzun dizeleri kullanır gibi görünüyor.

2013-01-07 GÜNCELLEŞTİRİN

jsfiddle update, it's now showing the character as a red dot gibi en son codepen yapar sonra.Görünüşe göreayrıca kendi başına U 200B artık karakter eklemek değil, bu yüzden bu sorunu artık daha sık olmalıdır.

2015-03-17 GÜNCELLEŞTİRİN

Serseribazen bu sorun neden için VirtualBox bir hata nedeniyle görünür. Çözüm this blog post başı olarak eğer Apache kullanıyorsanız eğer nginx config veya EnableSendfile Off 11 *ayarlamaktır.

Ayrıca kod geliştirme araçları karakter içerebilir, ancak geçerli sürüm () üzerinde 22.0.1229.79) ile yeniden edemedi Krom yapıştırılan o reported oldu.

Bunu nasıl tespit edebilirim?

Karakter görünmez olduğunu, nasıl var olduğunu nereden biliyoruz ki? Editörün görünmeyen karakterleri göstermek için sorabilirsiniz. Çoğu metin editörleri bu özelliği var. Vim, örneğin, varsayılan olarak görüntüler ve <u200b> ZWSP gösterir. Ayrıca online hata ayıklama: jsbin görüntüler kod, bölmeleri üzerinde kırmızı bir nokta olarak karakteri (ama bu sayfayı kaydettikten sonra yeniden çıkarmak gibi). CodePen.io also displays it as a dot ve hatta kurtardıktan sonra tutar.

İlgili sorunlar

Bu karakter kötü bir şey değil, aslında oldukça yararlı olabilir. This example on Wikipedia uzun bir dize, bir sonraki satıra kaydırılmış olması gereken yerde kontrol etmek için nasıl kullanılabileceğini gösterir. Eğer biçimlendirme karakterin varlığının farkında iseniz ancak, bir sorun olabilir. Eğer içinde bir dize (örneğin, nodeValue bir DOM öğesi olan hiçbir görünür içerik), beklediğiniz gibi bir dize için boş zaman aslında değil (hatta sonra uygulanması String.trim).

ZWSP <div> iki öğe this question görüldüğü gibi) arasında olduğu ortaya çıktığında bir HTML sayfası üzerinde görüntülenmesi için fazladan bir boşluk, örneğin neden olabilir. Bu durumda karakter yok sayılır bu yana jsfiddle üzerinde bile tekrarlanabilir değildir.

Eğer web sayfanın kodlamasını UTF-8 karakter aslında görüntülenebilir örneğin latin1 ​ gibi). tanınıyorsa değil başka bir olası sorun:

Eğer ZWSP şimdiki CSS kodu (satır kod veya bir harici stil sayfası), stilleri de değil incelenemeyecek düzgün, bu yüzden bazı stilleri sakın uygulamalı olarak gören this question).

ECMA Belirtimi

ECMA özellikli Özel Karakter (sürüm 3 5.1) için herhangi bir söz bulamadım. Güncel sürüm bahseder benzer karakterler (U 200C U 200D) Section 7.1, diyor onlar tedavi edilmelidir IdentifierParts "dışında yorum, dizelerini, ve düzenli ifade harfleri". Bu karakterler, örneğin, bir değişken adı (var x\u200c; gerçekten çalışır) bir parçası olabilir.

Section 7.2 geçerli Beyaz boşluk karakterleri (sekme,, no-break space uzay, vb.) listeler, ve belli belirsiz başka bir Unicode bahseder “uzay ayırıcı” (“”) Zs boşluk olarak değerlendirilmelidir. kategori Ben pek iyi bir insan tartışmak için görüşler bu konuda, ama bana öyle geliyor ki, U 200B kabul edilmelidir boşluk göre, zaman içinde aslında uygulamaları (en azından Chrome ve Firefox) görünmesi için onları tedavi olarak, beklenmeyen bir belirteç (veya bir kısmını), neden sözdizimi hatası.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010
  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008
  • Motor Trend Channel

    Motor Trend

    11 Mart 2006