Maison >interface Web >js tutoriel >JavaScript的strict模式与with关键字介绍_基础知识
2009年12月,ECMAScript发布了ECMAScript 5,这距离上一个版本的ECMAScript 3标准发布已经整整十年了,其间JavaScript虽然大行于web编程,ECMAScript 4却最终因为利益相关的各大厂商和组织在此语言的复杂性(即是否增加大量特性以扩展ECMAScript的功能)上的分歧而夭折,使得ECMAScript新标准的制订大大落后于编程的实践。ECMAScript 5在目标上没有那么雄心勃勃,除去新增了对JSON的支持和反射的更全面的控制,一项重要改进就是引入“严格模式”(strict mode)。在此模式下,ECMAScript的语法变得更严格,使得原先许多常见的易致错的代码不再被允许,包括强制变量声明和不允许with语句等。采用这种模式很简单,只要在脚本文件或者函数的首行添加"use strict";这样一行字符串就可以了。
笔者后知,2010年还曾写了一篇小文讨论with关键字的缺陷,随附如下。
楔子
很久很久以前,神笔马良的家乡为了纪念他要将一条马路以他的名字命名。马良没有推辞,不过提出了四个字的意见。多年以后,一位外地人来到这里,在这条马路上拦住一个当地人问路。
请问这是神马路?
对,这是神马路。
你也不知道吗?
我就是这的人,怎么会不知道。
那这是神马路?
你知道了还问什么。
我就是不知道这是神马路。
那我不是已经告诉你这是神马路了吗?
你能不能再说一遍这是神马路?
……
过后,这个当地人想起当年神笔马良的意见,恍然大悟。马良说的是——勿用简称。
A Question
One day Tom said to Wang Er, his Chinese friend,“I have a dream. I want to show myself on CCTV.”The next day Tom broke into a neighbor shop. The police didn't take much time to identify and arrest Tom because he was captured very clearly by the shop's CCTV.
The question is when Tom said his dream, he is
A) ambitious B) not ambitious C)ambiguous D) unambiguous
The right answer is B) and C).
正文
以上两个古今中外的例子说明简写有时会引起歧义。这在Javascript中也存在。有时候要反复引用一个名字很长的变量是很麻烦的,比如:
objectWithLongName1.propty1=value1;
objectWithLongName1.propty2=value2;
objectWithLongName1.propty3=value3;
objectWithLongName1.method1();
但是一个清晰的名字对于程序的可读性又是很重要的。所以Javascript提供了with语句。上面的例子可以改写成: