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

 更新时间:2010年08月29日 23:33:51   作者:  
前些天IEBlog中提到实现互通并不是只靠标准就行,其中举出了一些关于事实上的标准的考虑——所谓“事实上的标准”,也就是并非标准,但大家都遵循着它去做事情的那么一种东西。

前些天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中的对象与JSON

    JavaScript中的对象与JSON

    这篇文章主要介绍了JavaScript中的对象与JSON,本文讲解了定义JSON与javascript对象、javascript对象转换为JSON、javascript中解析JSON等内容,需要的朋友可以参考下
    2015-07-07
  • document.getElementById获取控件对象为空的解决方法

    document.getElementById获取控件对象为空的解决方法

    今天写个网页,想在页面加载onLoad时,动态显示由后台其他程序传来的数据时,用document.getElementById获取控件对象总是为空。但是检查了这个id确实是存在的。看下文的示例和解决方法
    2013-11-11
  • 详解用JS添加和删除class类名

    详解用JS添加和删除class类名

    这篇文章主要介绍了用JS添加和删除class类名,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • JavaSacript中charCodeAt()方法的使用详解

    JavaSacript中charCodeAt()方法的使用详解

    这篇文章主要介绍了JavaSacript中charCodeAt()方法的使用详解,是JS入门学习中的基本知识,需要的朋友可以参考下
    2015-06-06
  • window.location.reload 刷新使用分析(去对话框)

    window.location.reload 刷新使用分析(去对话框)

    这篇文章主要介绍了window.location.reload 刷新使用分析(去对话框),需要的朋友可以参考下
    2015-11-11
  • JavaScript 无符号右移运算符

    JavaScript 无符号右移运算符

    无符号右移运算符 (>>>)是右移表达式的位,不保留符号。
    2009-04-04
  • javascript实现用户必须勾选协议实例讲解

    javascript实现用户必须勾选协议实例讲解

    这篇文章主要介绍了javascript实现用户必须勾选协议实例讲解,写页面的时候经常会用到,有感兴趣的同学可以学习下
    2021-03-03
  • javascript 回调函数详解

    javascript 回调函数详解

    本文围绕JavaScript函数,回调函数,回调函数的使用场合,回调模式,函数表达式 等方面展开讨论,希望对大家有所帮助
    2014-11-11
  • JSON的语法与规则详解

    JSON的语法与规则详解

    这篇文章主要介绍了JSON的语法与规则详解,Web API可以接收JSON格式的数据,也可以返回JSON格式的数据。在接收JSON 数据时,需要使用相应的库或框架来解析JSON数据,在返回JSON数据时,可以使用相应的库或框架将数据转换为JSON格式
    2023-07-07
  • 全选复选框JavaScript编写小结(附代码)

    全选复选框JavaScript编写小结(附代码)

    这篇文章主要介绍了全选”复选框JavaScript编写,分别附上html和js代码以供大家更深刻了解,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。
    2017-08-08

最新评论