javascript的use strict(使用严格模式)
上一篇博文学习变量声明带var和不带的区别.搜索相关的文章. 引出了另一个概念.
"use strict" 使用严格模式
对于一个使用者而不是概念研究者,我觉得没有意义争论或者讨论严格模式存在意义我只想记住他的作用是怎样的.使用他之后会怎样.
- 1. 怎么写?
首先严格模式可以写在整个脚本或模块中,也可以写在函数中.如果写在全局环境,可以直接在文件的第一句加入"use strict"就可以了. 但是如果这么写的话你就惨了.
假如你的文件引入其它脚本文件时. 假如其它脚本没有启用严格模式你将面临很多问题.
所以建议把严格模式写在函数中,写在函数内的第一句就可以了.
- 2. 有什么用?
- 去除with关键字,使用严格模式后,with关键字会报错不支持
with(){
}这样的写法了.
- 防止意外的全局变量,也就是上一篇文章的. 这样不带var的声明变量也不可以了.
a = 2;
- 函数中未定义或者为null的this不在指向全局变量.防止依赖函数中的默认this行为代码出错.
//"use strict"
this.color = "red";
function sayColor() {
console.log(this.color);
}
sayColor();
sayColor.call(null);undefined
undefined严格模式
"use strict"
this.color = "red";
function sayColor() {
console.log(this.color);
}
sayColor();
sayColor.call(null);console.log(this.color);
^
TypeError: Cannot read property 'color' of undefined另一种情况
"use strict"
function Person(name) {
this.name = name;
} var me = Person("Nicholas");this.name = name;
^
TypeError: Cannot set property 'name' of undefined原型继承
"use strict"
function Person(name) {
this.name = name;
} var me = new Person("Nicholas");没有报错. 原来这样. this = _proto_ = prototype 这些属性都是在new 一个新的对象. 就是在原型继承的时候赋值的.
- 重命名变量会报错,这个不多说了,都理解.
- 安全的eval()
//"use strict";
var y = eval("var x=10;");
console.log(x); //"use strict";
var y = eval("var x=10;");
console.log(x);console.log(x);
^
ReferenceError: x is not defined - 禁止对只读属性赋值
// "use strict";
var person = {};
Object.defineProperty(person, "name",{
writable: false,
value: "Nicholas"
});
person.name = "John";以上正确
"use strict";
var person = {};
Object.defineProperty(person, "name",{
writable: false,
value: "Nicholas"
}); person.name = "John";报错:
c:\Users\Feng Huang\WebstormProjects\MemberManagement\test4.js:13
person.name = "John";
^
TypeError: Cannot assign to read only property 'name' of #<Object>提示只读属性不能赋值.
javascript的use strict(使用严格模式)的更多相关文章
- javascript高级程序设计读书笔记----严格模式
ECMAScript5最早引入“严格模式". 使用 "use strict"开启严格模式 function test(){ "use strict"; ...
- javascript设计模式详解之命令模式
每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某 ...
- javascript设计模式详解之策略模式
接上篇命令模式来继续看下js设计模式中另一种常用的模式,策略模式.策略模式也是js开发中常用的一种实例,不要被这么略显深邃的名字给迷惑了.接下来我们慢慢看一下. 一.基本概念与使用场景: 基本概念:定 ...
- JavaScript创建对象(三)——原型模式
在JavaScript创建对象(二)——构造函数模式中提到,构造函数模式存在相同功能的函数定义多次的问题.本篇文章就来讨论一下该问题的解决方案——原型模式. 首先我们来看下什么是原型.我们在创建一个函 ...
- javascript开发HTML5游戏--斗地主(单机模式part3)
最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...
- javascript开发HTML5游戏--斗地主(单机模式part2)
最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...
- javascript创建对象的方法--动态原型模式
javascript创建对象的方法--动态原型模式 一.总结 1.作用:解决组合模式的属性和函数分离问题 2.思路:基本思路和组合模式相同:共用的函数和属性用原型方式,非共用的的函数和属性用构造函数 ...
- JavaScript和angularJs语法支持严格模式:”use strict”
如果给JavaScript和angularjs代码标志为“严格模式”,则其中运行的所有代码都必然是严格模式下的.其一:如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常.其二:如果在运 ...
- javascript中的Strict模式
目录 简介 使用Strict mode strict mode的新特性 强制抛出异常 简化变量的使用 简化arguments 让javascript变得更加安全 保留关键字和function的位置 总 ...
随机推荐
- python解释器配置和python常用快捷键
1.准备工作 安装好Pycharm2017版本 电脑上安装好Python解释器 2.本地解释器配置 配置本地解释器的步骤相对简洁直观: (1)单击工具栏中的设置按钮. (2)在Settings/Pre ...
- Django项目之客户
关于客户的操作 主页(被继承) {% load static %} <!DOCTYPE html> <html lang="en"> <head> ...
- Codeforces Round #450 (Div. 2)
Codeforces Round #450 (Div. 2) http://codeforces.com/contest/900 A #include<bits/stdc++.h> usi ...
- 对stm32f373XX的startup.s的文件的分析
;******************** (C) COPYRIGHT 2012 STMicroelectronics ********************;* File Name : start ...
- 【linux】下Apache无法启动(8080端口被占用)
Linux下8080端口被占用,apache无法启动. 打开终端输入netstat -lnp|grep 8080 发现竟然是tcp6 占用里,因此ipv6启用占用了端口. 1.打开/etc/sysct ...
- js的urlencode
function urlencode (str) { str = (str + '').toString(); return encodeURIComponent(str).replace(/!/g, ...
- Vmware黑屏解决方法
此原因是显卡性能差,显示选项开启了3D加速导致的,具体修改步骤: 英文路径:VM->Settings->Hardware->Display 在右面的内容栏中将 Accelerate ...
- 解决input 有readonly属性 各个浏览器的光标兼容性问题
<input type='text' readonly unselectable='on' onfocus='this.blur()'/> 目标:input 只能读,但是在ie.火狐浏览器 ...
- asp.net core webapi iis jquery No 'Access-Control-Allow-Origin' header is present on访问跨域问题
我的解决方案是:设置特定method允许所有请求源访问,具体看业务需求 第一步:starup文件下ConfigureServices中增加如下配置 //跨域//设置了允许所有来源 services.A ...
- CBV FBV rest framework
CBV与FBV restful协议 ---- 一切皆是资源,操作只是请求方式 ----book表增删改查 /books/ books /books/add/ addbook /books/(\d+)/ ...