严格模式和普通模式之间的区别

综述:"use strict"来设置严格模式,目的是消除js的不严谨之处,减少怪异行为,确保安全,提高编译效率,为未来的js做好铺垫

1.什么是严格模式和普通模式?

通过在整个js文件或者function前部添加"use strict",使js解析器在执行js或者函数的时候,使用比普通模式下更加严格的语法,这就叫做严格模式;

2.为什么要区分这两种模式?区分有什么好处?

严格模式是一种将更好的错误检查引入代码中的方法。 在使用严格模式时,无法使用隐式声明的变量、将值赋给只读属性或将属性添加到不可扩展的对象等 ,严格模式的目的

  • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为  

  • 消除代码运行的一些不安全之处,保证代码运行的安全  

  •  提高编译器效率,增加运行速度  

  •  为未来新版本的Javascript做好铺垫

3. 两者之间的区别?

严格模式非严格模式
禁止使用with语句允许使用with语句
所有变量要先声明使用未声明的变量将隐式声明为全局变量
函数(非方法)中的thisundefinedthis是全局对象
call()apply()传入的第一个值不会被转换call()apply()传入的第一个值如果是nullundefined,则会被全局对象取代,如果是原始值则转换为对应的包装对象
给只读属性和不可扩展的对象创建新成员将抛出类型错误异常只是简单的操作失败
传入eval()的代码不能在定义变量和函数变量和函数定义在eval()创建的新作用域中
函数中的arguments对象拥有传入函数值的静态副本 
delete后跟非法标识符将抛出语法错误异常只是简单的返回false
delete删除不可配置的属性将抛出类型错误异常只是简单的返回false
在对象直接量中定义多个同名属性将产生语法错误不会报错
函数声明存在多个同名的参数将产生语法错误不会报错
不允许使用八进制直接量某些实现是允许的
evalarguments当作关键字,并且不允许更改 
限制了对栈的检测能力,arguments.callerarguments.callee将抛出类型错误异常 

4.怎样来设置严格模式和普通模式?

声明严格模式 可以通过在文件、程序或函数的开头添加 "use strict"; 来声明严格模式。 此类声明称作“指令序言”。 严格模式声明的范围取决于其上下文。 如果在全局上下文(函数的范围之外)中声明严格模式,则程序中的所有代码都处于严格模式。如果在函数中声明严格模式,则函数中的所有代码都处于严格模式,如下所示:

//test.js
'use strict'; //整个js文件都是严格模式下执行的
 var n = 1;
 var foo = function(){...};
//...
var n = 1;
var foo = function(){
    'use strict';
    //在foo函数内是严格模式
    //some code...
}

注:文章中引用了他人的博客内容,感谢

 

 

 

 

### ACM竞赛中的输入输出特点 在ACM/ICPC竞赛环境中,对于输入输出的要求有特定的规定。题目通常涉及标准输入输出的操作[^2]。这意味着所有的输入数据都来自`stdin`(标准输入流),而所有输出结果都需要写入`stdout`(标准输出流)。这种做法简化了评测系统的实现,使得自动评判成为可能。 #### 输入处理差异 不同于日常编程实践中可以自由定义文件名或其他形式的数据源,在此类比赛中,读取外部数据仅限于使用预设好的接口来获取测试案例。例如: ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 从标准输入读取整数n cout << "Read number is: " << n << endl; // 向标准输出打印信息 } ``` 这段代码展示了如何利用C++语言内置的`cin`对象接收命令行传来的参数作为程序运行时所需的初始条件之一;同样地,也可以借助`cout`向终端显示计算所得的结果。 #### 输出格式严格控制 另一个显著区别在于对输出格式有着极其严格的限定。参赛者不仅需要提供正确的解答,还必须严格按照题目描述中指定的方式呈现最终答案。任何多余的字符、空白符或是不符合规范的形式都有可能导致得分减少甚至被判错题。比如下面这个例子说明了一个简单的排序问题应该怎样按照要求输出结果[^3]: 假设有一个关于外星人成绩排名的任务,其中提到:“输出要对这N个X星人的成绩进行排序还需要补充的关系个数”。那么对应的输出部分应当像这样编写: ```cpp if (additional_relations_needed == 0) { printf("0\n"); } else { printf("%d\n", additional_relations_needed); } ``` 这里特别注意的是每条记录之间以及最后都要加上换行符`\n`以满足大多数在线判题平台的习惯设置。 #### 原因分析 之所以采取这样的机制主要是为了保证公平性自动化程度。一方面,统一规定能够消除不同操作系统环境下路径解析带来的不确定性;另一方面,则便于构建高效的测评框架——即所谓的OJ(Online Judge),它可以在短时间内完成大量提交作品的功能验证工作而不受人为因素干扰。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值