标准与规范

标准与规范

W3C 标准与 ES 规范
标准:是一种约定 比如 HTTP 就是我们自行去遵循的约定。

规范:是一种规定 比如 ES5 就是一种规定,你必须遵循这个规定(语法)。

所以:
• 标准 === 约定
• 规范 === 规定

为什么出现:

所谓的标准就是为了弥补主观上的不足

所谓的规范就是为了弥补客观上的不足


标准的解释:

比如 W3C 标准是为了弥补主观上的不足,弥补的是新手对 SEO 的理解,即使不了解 SEO,只需要去遵循 W3C 标准即可确保获得良好的 SEO,这是因为 SEO 的编写者同样遵循这一种约定。

如果不遵循约定的话,比如用 DIV 写一切的家伙,SEO 的编写者要怎样才能知道你写的是什么,他不可能搜索全部 DIV 的,太费资源和时间了,所以咱们就约定一下将那些很重要的信息比如关键词是:HTML5、CSS3、Node 的这些都写到一个标签里面好不好?这样省资源省时间呢,大家觉得都 OK 于是我们就专门弄了一个表述这些信息的标签,叫 meta(元信息标签),然后在根据不同的类型来区分一下这些重要信息,比如用 name="keywords" 来标识关键词:

用 name="author" 来标识作者:

这样 SEO 就知道那些内容是作者,那些内容是关键词了~

再比如超文本标记语言(HTML)是一种标准,所以你的内容即使是这样写:

0

1



     2
     3






4

你打开网页会发现正常显示,就连在 上的数字 0 都会被显示,不会报错,是的,HTML 是种约定。

这就是所谓的标准就是为了弥补主观上的不足


规范的解释:

比如 ES 系列的规范就是为了弥补客观上的不足,因为客观上来说早期的 JS 语言对于新手、老手而言都是遍地陷阱,所以才出现了 JQuery 的时代,JQ 就是为了弥补这门语言本身的缺陷而出现的(太难精通,也是一种缺陷),也是因此 ES 委员会才不断的推出新的规范来降低学习难度和提高易用性。

比如在早期 ES 规范中,语言本身并没有提供一个方便的获取所有属性的 API,获取属性的 API 要么只能获取可枚举属性,要么只能不可枚举属性,将二者都各自提取出来复制一份才能真正完成深拷贝。

为什么 ES5 不能一次性确切的获取所有属性,而不管可枚举还是不可枚举?其实这中提案早就有,只是因为以前前端地位低,大家不愿改变,所以被搁置了。

注:for...in 只遍历可枚举属性,而且不保证其次序的稳定性。

所以走心的 ES6 有 Object.getOwnPropertyDescriptor() 这个函数来简化这个问题,这个可以获取对象的自身属性,包括不可枚举的属性,现在获取属性已经变得简单。

这就是所谓的规范就是为了弥补客观上的不足

你可能感兴趣的:(标准与规范)