2016-09-14 15 views
8

, bir kaynak dosyada bariz hata gibi görünen bir çizgi bulundu:Neden false ++ Firefox'ta bir SyntaxError, Chrome'da bir ReferenceError üretir? JavaScript bazı hatalı parça hata ayıklamak çalışırken

false++; 

bu açıklama tüm tarayıcılarda farklı davranır neden Ne anlamamıza yapmak olduğunu.

  • Chrome'da, bir ReferenceError alıyorum ve tüm komut dosyası çalıştırılmıyor.
  • Firefox'ta bir SyntaxError alıyorum ve tüm komut dosyası çalıştırılmıyor.
  • Internet Explorer'da bir SyntaxError alıyorum ve betik yalnızca hata oluştuğu satırın sonuna kadar çalışıyor.

Farklı tarayıcıların aynı bozuk JavaScript'i farklı şekillerde işlemesine izin verilip tasarlanmadı mı?

Hatanın ne olduğunu ve nasıl düzeltileceğini biliyorum, ancak en azından hata türünün teknik özellikleri tarafından zorunlu tutulmaması gerekir mi?

+0

Spesifikasyonlar ne diyor? – Teemu

+3

@Teemu Bilmiyorum. Yapıyor musun? – Lynn

+3

Bir başvuru hatası olmalı, bkz. [* ECMA-262 §12.4.1 *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-update-expressions-static-semantics -lyly-errors): * LeftHandSideExpression'un IsValidSimpleAssignmentTarget öğesi yanlışsa, erken bir Referans Hatasıdır. * Postfix operatörü, değeri değiştirmeyi dener; * false * değişmez, dolayısıyla geçerli bir basit atama hedefi değildir. – RobG

cevap

5

Chrome güncel görünüyor. bir hazır (örneğin false) değil bir tanımlayıcı olan assign to a primary expression çalışırken

ES6 yılında
  • ve ES7 bir ReferenceError atılır. ES5 erken hata olarak
  • (genellikle SyntaxError s olan) belirtilmemiş türünden "erken belirleme değeri Reference olmadığını yapılabilir kendisi için herhangi bir değeri " atamaları için if it would happen olsa ReferenceError olur atılır atılmış olmalı, bu yüzden erken hatanın bu türden olması gerektiğini iddia edebiliriz.
  • ES3 ise
  • , hata durumunun açıklaması ES5 benzer, ancak yalnızca devletler "diye bir uygulama may [sic!] bir sözdizim hatası ve dolayısıyla olarak çalışma zamanı hataları aşağıdaki türlü herhangi bir örneğini tedavi Bunu erken rapor et ".
  • ES1 ve ES2'de hiç bir hata türü yoktu ve hiç bir istisna işleme olmadı ve yalnızca referans olmayan bir öğeye atama "bir çalışma zamanı hatası oluşturmak için" olarak belirlendi. Hataların herhangi bir koşulda gerçekleşeceğini kanıtlayabilirlerse, uygulamaların derleme zamanında erken rapor vermesine izin verildi. Firefox'ta işleme hatası ES5 veya ES3 ifade temel alınarak mazur olsa

, bir çalışma zamanını SyntaxError atma davranışı, Internet Explorer Bunlardan herhangi uymuyor. Ancak, Microsoft, fix this in Chakra'u planlamaktadır. Daha fazla tartışma için, bkz. https://github.com/tc39/ecma262/issues/257 ve https://github.com/tc39/ecma262/issues/691.

0

Yalnızca bir tahmin, ama belki de Firefox sözdizimi hatalarını denetler, ilk olarak & Chrome, önce referans hatalarını denetler. İlk hata atıldı, & artık gitmiyor. Hatanın ana nedeni, false'nin bir Tamsayı veya sayısal değer değil, bir Boolean olmasıdır, bu nedenle artırılamaz veya azaltılamaz. Kaynak kodunu görmeden, false'yi var falseCount gibi bir şeye değiştirmeyi deneyebilirim.

İlgili konular