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 相关文章推荐
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
Nov 12 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 Javascript
FF IE浏览器修改标签透明度的方法
Jan 27 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 Javascript
JavaScript实现的SHA-1加密算法完整实例
Feb 02 Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 Javascript
js与applet相互调用的方法
Jun 22 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
Nov 22 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
Dec 19 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
Dec 22 Javascript
5分钟学会Vue动画效果(小结)
Jul 21 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.MVC的模板标签系统(五)
2006/09/05 PHP
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
PHP里的中文变量说明
2011/07/23 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
php微信支付接口开发程序
2016/08/02 PHP
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
Python列表append和+的区别浅析
2015/02/02 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
python turtle 绘制太极图的实例
2019/12/18 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
党支部组织生活会整改方案
2014/09/30 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
通讯稿范文
2015/07/22 职场文书