标准与规范
W3C 标准与 ES 规范
标准
:是一种约定 比如 HTTP 就是我们自行去遵循的约定。
规范
:是一种规定 比如 ES5 就是一种规定,你必须遵循这个规定(语法)。
所以:
• 标准 === 约定
• 规范 === 规定
为什么出现:
所谓的标准就是为了弥补主观上的不足。
所谓的规范就是为了弥补客观上的不足。
标准的解释:
比如 W3C 标准是为了弥补主观上的不足,弥补的是新手对 SEO 的理解,即使不了解 SEO,只需要去遵循 W3C 标准即可确保获得良好的 SEO,这是因为 SEO 的编写者同样遵循这一种约定。
如果不遵循约定的话,比如用 DIV 写一切的家伙,SEO 的编写者要怎样才能知道你写的是什么,他不可能搜索全部 DIV 的,太费资源和时间了,所以咱们就约定一下将那些很重要的信息比如关键词是:HTML5、CSS3、Node 的这些都写到一个标签里面好不好?这样省资源省时间呢,大家觉得都 OK 于是我们就专门弄了一个表述这些信息的标签,叫 meta(元信息标签),然后在根据不同的类型来区分一下这些重要信息,比如用 name="keywords" 来标识关键词:
<meta name="keywords" content="HTML5,CSS3,Node">
用 name="author" 来标识作者:
<meta name="author" content="zqh">
这样 SEO 就知道那些内容是作者,那些内容是关键词了~
再比如超文本标记语言(HTML)是一种标准,所以你的内容即使是这样写:
0
<!DOCTYPE html>
1
<html>
<head>
<meta> 2
<meta> 3
</head>
<body>
</body>
</html>
4
你打开网页会发现正常显示,就连在 <!DOCTYPE html>
上的数字 0 都会被显示,不会报错,是的,HTML 是种约定。
这就是所谓的标准就是为了弥补主观上的不足。
规范的解释:
比如 ES 系列的规范就是为了弥补客观上的不足,因为客观上来说早期的 JS 语言对于新手、老手而言都是遍地陷阱,所以才出现了 JQuery 的时代,JQ 就是为了弥补这门语言本身的缺陷而出现的(太难精通,也是一种缺陷),也是因此 ES 委员会才不断的推出新的规范来降低学习难度和提高易用性。
比如在早期 ES 规范中,语言本身并没有提供一个方便的获取所有属性的 API,获取属性的 API 要么只能获取可枚举属性,要么只能不可枚举属性,将二者都各自提取出来复制一份才能真正完成深拷贝。
为什么 ES5 不能一次性确切的获取所有属性,而不管可枚举还是不可枚举?其实这中提案早就有,只是因为以前前端地位低,大家不愿改变,所以被搁置了。
注:for...in 只遍历可枚举属性,而且不保证其次序的稳定性。
所以走心的 ES6 有 Object.getOwnPropertyDescriptor()
这个函数来简化这个问题,这个可以获取对象的自身属性,包括不可枚举的属性,现在获取属性已经变得简单。
这就是所谓的规范就是为了弥补客观上的不足。