De facto standard 世界上不可思议的事实标准


Posted in Javascript onAugust 29, 2010

前些天IEBlog中提到实现互通并不是只靠标准就行,其中举出了一些关于事实上的标准的考虑——所谓“事实上的标准”,也就是并非标准,但大家都遵循着它去做事情的那么一种东西。

这些事实上的标准(也写作“De facto standard”)往往是在某一种事物还没有标准的时候由当事的各方相互妥协而形成的,——有趣的是,作为妥协的结果,这些“事实上的标准”自身往往和其它的东西并不协调;而真正被称作“标准”的东西往往是在发生了很多事情之后才产生的,所以几乎任何地方都有“事实上的标准”和“标准”有些格格不入的感觉。

说了半天废话,该说正题了:

在本文开头的那个链接中的博文里,提到了一个关于正则表达式的语法问题:

像是“/]/”这样的形式,由于“]”本身是“匹配这些字符中的任意一个”的语法中的一部分,故ECMAScript标准中把这样的形式标记为“无效的表达式”——但是同时这样的用法由于构成简单,理解起来也并不容易产生歧义,所以实际上在大部分浏览器中这么用都是被认为“有效”的。

当IE9的开发团队刚开始测试他们的新JavaScript引擎“Chakra”的时候,它们发现有一些本来运行得很好的JavaScript代码在“Chakra”中不能运行,其中一个原因就是最初“Chakra”是按照ECMAScript标准来实现的,而旧代码中包含很多像是这样的在标准中无效的东西——若要兼容,并且“互通”,“Chakra”需要做的就不只是和标准一致,还要能认可这样的表达式。

这是“实现互通并不是只靠标准就行”的一个好例子。

除了这个以外,JavaScript中一些其它的事实标准,比方说:

在一个字符串中如果在反斜线“\”之后输入一个换行标记,无论是[LF](\n实际代表的含义),还是[CR](\r实际代表的含义),还是[CR][LF](\r\n实际代表的含义),都会和反斜线一起完全被忽略掉——说“忽略掉”还不够准确,也许应该说“这种组合会被认为是把一个字符串拆在多行代码里”之类的。

如果这样说还是觉得不好理解(甚至是莫名其妙)的话,通过一些代码例子就应该比较容易理解了。

比方说,这样的代码:

var s = "This is an\ 
one line string.";

其实是和
var s = "This is an" + 
" one line string.";

等价的。
而如果写成
var s = "This is an 
one line string."

就会产生一个语法错误,原因是“未结束的字符串”。

刚开始的时候它只是在IE中使用的JScript引擎独有的一个特性,但是现在几大主流浏览器都支持了这种写法,就像我刚刚提到的,它也是“事实上的标准”之一。

我很有兴趣多讲一些关于“事实上的标准”的事情,但是无奈这种东西实在是太多了,我只知道其中的很小一部分——而且还常常记不起来,所以今天我也只能写到这里了,如果我再想起来什么的话也许会另外写篇新博文吧

Javascript 相关文章推荐
Javascript中的数学函数
Apr 04 Javascript
XMLHTTPRequest的属性和方法简介
Nov 23 Javascript
web性能优化之javascript性能调优
Dec 28 Javascript
图片无缝滚动代码(向左/向下/向上)
Apr 10 Javascript
如何使用json在前后台进行数据传输实例介绍
Apr 11 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
jquery实现一个简单好用的弹出框
Sep 26 Javascript
Bootstrap前端开发案例一
Jun 17 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
Vue实现商品飞入购物车效果(电商项目)
Nov 26 Javascript
原生js+css实现tab切换功能
Sep 17 Javascript
js 中 document.createEvent的用法
Aug 29 #Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
Aug 29 #Javascript
jQuery下的几个你可能没用过的功能
Aug 29 #Javascript
基于jquery的一个浮动框(扩展性比较好 )
Aug 27 #Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
Aug 27 #Javascript
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 #Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
Aug 27 #Javascript
You might like
PHP 和 HTML
2006/10/09 PHP
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
paypal即时到账php实现代码
2010/11/28 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
浅谈javascript中createElement事件
2014/12/05 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
Python3基础之list列表实例解析
2014/08/13 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
在python中pandas的series合并方法
2018/11/12 Python
Python实现自动整理文件的脚本
2020/12/17 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
计算机科学与技术应届生求职信
2013/11/07 职场文书
老师自我鉴定范文
2013/12/25 职场文书
小学毕业感言150字
2014/02/05 职场文书
购房协议书范本
2014/10/02 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
村主任当选感言
2015/08/01 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android