哪个更好: <script type="text/javascript">...</script> 还是 <script>...</script>?

126

哪种更好或更方便使用:

<script type="text/javascript">...</script> 
或者
<script>...</script>

8
如果您正在使用JavaScript作为语言,那么第一个选项显然更好。 - Chinmayee G
我猜你从将脚本声明为JavaScript中获得的性能提升微不足道,但是这是个好问题! - The_Butcher
11
在 HTML v4 和 HTML v5 中,“正确”的答案是否不同? - Dimitrios Mistriotis
这不是关于哪个更好,而是在什么时候使用什么;当使用HTML5声明 <!doctype html> 时,在 <script> 标签上使用 MIME 类型提示 type="text/javascript" 是没有必要的,因为它默认适用。另一方面(非HTML5),建议使用 MIME 类型提示 type="text/javascript" - nyedidikeke
7个回答

154

如果你使用的是HTML5,那么你是否需要添加type属性呢?不需要。否则,需要。HTML 4.01和XHTML 1.0 规定type属性为必填项,而HTML5将其设置为可选项,默认为text/javascript。由于HTML5已经被广泛实现,所以如果你使用HTML5 doctype,则<script>...</script>是有效且良好的选择。

至于type属性中应该放什么,2006年注册的MIME类型application/javascript旨在取代text/javascript,并得到了所有主要浏览器(包括Internet Explorer 9)当前版本的支持。来自相关RFC的引用:

因此,本文档定义了text/javascript和text/ecmascript,但将它们标记为“过时”。不鼓励使用实验性和未注册的媒体类型,如上面部分中列出的媒体类型。

  * application/javascript
  * application/ecmascript

这些在文档中也有定义,旨在供常见使用,应该使用它们。

然而,包括版本8及以下的IE不会执行带有type属性为application/javascriptapplication/ecmascript<script>元素内的脚本,因此如果需要支持老IE,则只能使用text/javascript


3
您不必使用type属性。无论是HTML4.01还是XHTML 1.0的验证都不再是必须的,而且所有浏览器都能在没有text/javascript的情况下支持您的标签。 - Ian Storm Taylor
9
@Ian:在写作时,HTML5规范是一份工作草案,并且尚未变成目前不断移动的目标状态。浏览器对HTML5的实现远远落后于现在的水平。考虑到这一点,我认为当时使用HTML5在一般的网站上并不可行,我的答案是完全公正的,并且始终带有免责声明“如果您想让您的HTML有效”。我同意事情已经有所改进,这个答案可能需要修订,但我不同意用HTML 4.01编写网页现在总是错误的做法。 - Tim Down
1
+1,刚从一个重复的问题中发现了这个问题。这让我想起了Anne Van Kesteren博客上的几篇文章,包括JavaScript MIME类型,在那里他讨论了这个问题。我找不到确切的文章,但我确定有一篇文章他建议根本不使用“type”,因为它在所有浏览器中都可以工作。也许是其他人写的。 - Andy E
1
只是想说“谢谢”,因为我试图弄清楚为什么一个“application/javascript” JS文件在IE8及以下版本中无法执行! - andrewtweber
"文本/JavaScript;版本=1.8"怎么样? - SparK
@SparK - "text/javascript;version=1.8" 是为Firefox设计的。根据关于<script>标签的页面所述:“请注意,在Firefox中,您可以使用高级功能(如let语句和其他后续JS版本中的功能),方法是使用“type = application / javascript; version = 1.8”。但是要注意,由于这是一个非标准功能,这很可能会破坏其他浏览器的支持,特别是基于Chromium的浏览器。” - Kevin Fegan

10

两种写法都可以,但是xhtml标准要求你也必须指定type属性:

<script type="text/javascript">..</script> 

<!ELEMENT SCRIPT - - %Script;          -- script statements -->
<!ATTLIST SCRIPT
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  type        %ContentType;  #REQUIRED -- content type of script language --
  src         %URI;          #IMPLIED  -- URI for an external script --
  defer       (defer)        #IMPLIED  -- UA may defer execution of script --
  >

type = content-type [CI] 此属性指定元素内容的脚本语言并覆盖默认的脚本语言。脚本语言被指定为内容类型(例如,“text/javascript”)。 作者必须为此属性提供一个值,没有此属性的默认值。

请注意以上强调。

http://www.w3.org/TR/html4/interact/scripts.html

注:HTML5起,type 属性不是必需且为默认属性。


9

除非您使用HTML5,否则需要使用<script type="text/javascript"> </script>。在这种情况下,建议您优先使用<script> ... </script>(因为type属性默认指定为该值)。


6
这是需要的全部内容:
<!doctype html>
<script src="/path.js"></script>

1

<script type="text/javascript"></script> 是正确的方式,且兼容所有浏览器。


那是在 HTML 5 之前的正确方式。HTML 5 发布于你写下这个答案的两年前。 - Quentin

0
对于 HTML5,使用 <syntax>...</syntax> 更好、更方便。如果你正在使用 HTML5,就不需要显式地提及 type = "text/javascript",因为默认情况下type属性已经设置为"text/javascript",所以这是完全可选的。

-5

使用最新版的Firefox,我必须使用:

<script type="text/javascript">...</script>

否则脚本可能无法正常运行。

那不是真的。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接