script标签属性type与language使用选择


Posted in Javascript onDecember 02, 2012

被人问起一个问题:

<script language = "JavaScript"> 
<script type="text/javascript"> 
<script>

这三个标签的使用有什么区别?
虽然一直在用,却也没有好好去弄清楚,这里详细说明一下。
查阅一些资料,主要是浏览器支持问题。type 和 language 属性都可用来指定 <script> 标签中的脚本的类型。language 属性在 HTML 和 XHTML 标准中受到了非议,这两个标准提倡使用 type 属性。遗憾的是,这两个属性的值是不一样的。

您可能偶尔会看见 language 的值为 VBScript(对 type 而言是 text/vbscript),表示包含的脚本代码是用 Microsoft 的 Visual Basic Script 编写的。

利用 JavaScript,您还可以使用 language 的值 "JavaScript 1.1",表示包含的脚本语句只能被 Netscape 3.0 或更新的版本处理。Netscape 2.0 只支持 JavaScript 1.0,而无法处理标记为 "JavaScript 1.1" 的脚本。

为了保证脚本程序可以正常执行,除非特意使用仅 IE 支持的 VBScript 和 Script Encoder 机制外,应当将 SCRIPT 标记的 "type" 属性设置为 "javascript",并且不要设置已经废弃的 "Languange" 属性。

各浏览器对于 "type" 和 "language" 属性本身均支持,但是对于其中设置的脚本语言类型识别与支持各异:

  • "type" 和 "language" 同时存在时,所有浏览器均优先识别 "type" 属性内的脚本类型;
  • 其中 IE 浏览器实际支持 JScript 和 VBScript 脚本语言标示以及 Script Encoder 加密;
  • Firefox Chrome Safari Opera 对 "type" 属性值的具体识别宽容度不一致,相对 Chrome Safari 对属性值正确性校验更加宽松,Firefox 的校验最为严格;
  • 在 "Language" 属性值识别宽容度比较中,各浏览器中 Chrome Safari 依然最为宽松,IE 最为严格,Firefox 与 Opera 持平;
  • Language Encode 比较中,只有 IE 支持 JScript.Encoder 以及 VBScript.Encoder 类型设置,Firefox Chrome Safari均不支持,Opera 中则是该属性值被修复为默认的 Javascript 脚本语言后才有输出值。
<script language="javascript"> 
function a() { 
b = "a"; 
} 
a(); 
alert(b); 
</script>

关于变量有一个问题,即使你在函数内如同上面那样声明变量,它就会变成全局变量。
如果用 var 声明就会有一个问题。

<script language="javascript"> 
function a() { 
var b = "a"; 
delete b; 
alert(b); 
} 
a(); 
</script>

结果依然会弹出a。
为了保证脚本程序可以正常执行,除非特意使用仅 IE 支持的 VBScript 和 Script Encoder 机制外,应当将 SCRIPT 标记的 "type" 属性设置为 "javascript",并且不要设置已经废弃的 "Languange" 属性。

Javascript 相关文章推荐
用javascript来实现动画导航效果的代码
Dec 16 Javascript
JS中获取数据库中的值的方法
Jul 14 Javascript
jQuery实现手机号码输入提示功能实例
Apr 30 Javascript
jquery实现多屏多图焦点图切换特效的方法
May 04 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
Jun 16 Javascript
js正则表达式注册页面表单验证
Oct 11 Javascript
xcode中获取js文件的路径方法(推荐)
Nov 05 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
Apr 13 Javascript
JavaScript中Object基础内部方法图
Feb 05 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
May 26 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
Apr 22 Javascript
微信小程序视频弹幕发送功能的实现
Dec 28 Javascript
JavaScript中valueOf函数与toString方法深入理解
Dec 02 #Javascript
json对象转字符串如何实现
Dec 02 #Javascript
javascript 构造函数强制调用经验总结
Dec 02 #Javascript
js精度溢出解决方案
Dec 02 #Javascript
JavaScript词法作用域与调用对象深入理解
Nov 29 #Javascript
浏览器加载、渲染和解析过程黑箱简析
Nov 29 #Javascript
javascript控制swfObject应用介绍
Nov 29 #Javascript
You might like
ThinkPHP3.1查询语言详解
2014/06/19 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
高中毕业的自我鉴定
2013/12/09 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
教师培训简讯
2015/07/20 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL