前端开发系列005-基础篇之JavaScript严格模式
一、严格模式简单介绍
在JavaScript
中有严格模式和非严格模式两种运行环境。
>严格模式的主要特点
> ❏ 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
> ❏ 消除代码运行的一些不安全之处,保证代码运行的安全;
> ❏ 提高编译器效率,增加运行速度;
> ❏ 为未来新版本的Javascript做好铺垫。
严格模式 体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它。此外,同样的代码在严格模式中,可能会有不一样的运行结果甚至是无法运行。掌握严格模式相关的内容有助于更细致深入地理解Javascript,让你变成一个更好的程序员,而实现严格模式 只需要在脚本代码中添加上下面介绍的关键字即可。
关键字 “use strict”;
关键字具体说明
(1) 注意区分大小写,必须全部都是小写的
(2) 注意空格,整个字符串总共10个字符
(3) 单引号和双引号无所谓,但是需要有引号
(4) 必须写在作用域的最顶部,注意其具体的位置
(5) 可以加分号,也可以不加,但是必须是一个字符串
注意 下面的关键字写法均是错误的
"USE strict";
" use strict ";
"("USE strict").toLowerCase();"
二、严格模式使用注意点
> ➥ 严格模式使用注意
> 〇 修正this的值
> ① 所有的变量必须使用var 关键字声明
> ② 不能使用`delete`关键字删除全局变量
> ③ 在对象中不允许有同名的属性
> ④ 函数的参数必须唯一(不能出现同名的参数)
> ⑤ `arguments`对象的行为不同,严格模式下和实参相对独立
> ⑥ 禁用了`argument.callee`和`caller函数`
> ⑦ 不能在if语句中声明函数
> ⑧ 禁止使用`eval`和`argument`作为标识符
> ⑨ 禁用了`with`语句和八进制字面量
001 所有的变量都必须使用var关键字声明
a = 10; //错误的演示
console.log(10);
002 不能使用delete关键字删除全局变量
//在非严格模式下,删除失败(静默失败) 失败了不吭声,严格模式下直接报错
var a = 10;
delete a;
console.log(a);
003 在对象中不允许有同名的属性
//在非严格模式下,会使用后面的属性赋值作为最终值,在严格模式下则直接报错
var obj = {
name:"张三",
name:"李四"
}
console.log(obj);
004 函数的参数必须唯一(不能出现同名的参数)
//在非严格模式下,如果函数在定义的时候,使用了多个同名的参数,则在函数内部形参的实际值为最后一个传入的实参值
//在严格模式下,直接报错
// function func(a,a,a) {
// console.log(a);
// console.log(arguments);
// }
function func(a,b,c) {
console.log(a);
console.log(arguments);
}
func(1,2,3);
005 arguments对象的行为不同
(1)严格模式下,在函数内部修改了对象的指向,对arguments的值不会产生影响
(2)在严格模式下,形参的值和arguments的值是相互独立的,在函数内部修改了形参的值对arguments不受影响
(3)在非严格模式下,修改了形参的值,arguments中的数据会跟着改变
//测试引用类型的值作为函数的参数
function funcName(obj) {
console.log(obj);
console.log(arguments[0]);
//在函数内部修改形参的值
obj = {age:20};
console.log(obj);
console.log(arguments[0]);
}
funcName({name:"张三"});
//测试基本类型数据作为函数的参数
function fun(str) {
console.log(str);
console.log(arguments[0]);
str = "hello";
console.log(arguments[0]);
}
fun("hi");
006 禁用了argument.callee和caller函数
argument.callee
是对函数自身的引用 argument.calller
是对调用函数的引用
var num = (function (n) {
if (n ==1)
{
return 1;
}
return arguments.callee(n-1) + n;
})(10);
console.log(num); //55
007 不能在if语句中声明函数
//如果在if语句中声明函数,则会产生语法错误
if (true)
{
console.log("________");
function demo() {
console.log("呵呵呵呵");
}
demo();
}
008 禁止使用eval和argument作为标识符
var eval = "测试的字符串";
console.log(eval);
var arguments = "参数列表";
console.log(arguments);
009 修正this的值
在严格模式下,函数this的值始终是指定的值,无论指定的是什么值
var name = "测试的name";
function demoTest() {
//在非严格模式下,打印出来的this为全局的对象window
console.log(this); //在严格模式下打印出来的this为undefined
}
demoTest();
010 禁用了with语句
var o = {name:"暂时干",age:20};
with(o)
{
name = "lisi";
age = 48
}
console.log(o);
11 禁用了八进制
//以0开头的数据常常引起混乱
//var num = 023; //2*8 + 3 ==> 19
//console.log(num); //19
三、严格模式书写格式和作用范围
严格模式书写格式
01 必须使用单引号或者是双引号括住字符串
02 必须使用小写,不能出现大写字符
03 必须是10个字符,不能多和也不能少
04 字符串后面的分号可以省略
05 必须写在当前作用域的最顶上
//"use strict"; //正确写法
//"use strict" //正确写法 分号可以省略
//'use strict'; //正确写法 可以使用单引号
//"use strict"; //错误写法 必须是10个字符
//"use Strict"; //错误写法 所有的字符都必须小写
"use strict";
a = 10;
// "use strict"; //错误写法
b = 20;
console.log(a);
作用范围
① 函数的顶部(只对当前的函数有效)
② script标签的顶部,只对当前的标签有效,对页面中其他的script无效
//位置01 对func01和func02都有效
//"use strict";
function func01() {
//位置02 对func01有效,对func02无效
//"use strict";
a = 10;
console.log(a);
}
function func02() {
//位置03 对func02有效,但对func01无效
//"use strict";
b = 20;
console.log(b);
}
func01();
func02();
前端开发系列005-基础篇之JavaScript严格模式的更多相关文章
- 前端开发【第4篇:JavaScript基础】
JavaScript简述 上一篇文章已经聊过JavaScript的历史了这里不再复述了直接切入正题,JavaScript是一门解释型.动态类型.弱类型语言. 解释型语言和编译型语言就类似看一本书,编译 ...
- 前端开发【第5篇:JavaScript进阶】
语句 复合表达式和空语句 复合表达式意思是把多条表达式连接在一起形成一个表达式 { let a = 100; let b = 200; let c = a + b; } 注意这里不能再块级后面加分号, ...
- 前端开发【第3篇:JavaScript序】
JavaScript历史 聊聊JavaScript的诞生 JavaScirpt鼻祖:Bremdan Eich(布兰登·艾奇),JavaScript的诞生于浏览器的鼻祖网景公司(Netscape),发布 ...
- 前端开发【第6篇:JavaScript客户端(浏览器)】
Web浏览器中的JavaScript 客户端JavaScript时间线 1.Web浏览器创建Document对象,并且开始解析web页面,解析HTML元素和它门的文本内容后添加Element对象和Te ...
- 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)
背景 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...
- 前端开发:css基础知识之盒模型以及浮动布局。
前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西? 为什么这个浮动没有效果? 这个问题楼主已经回答了n遍.今天则是把 ...
- ESP8266开发之旅 基础篇① 走进ESP8266的世界
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
随机推荐
- python,url请求失败重新请求的方法(try、except 应用)
爬虫请求链接,有时候会出现请求失败或者等待时间很长的情况,用下面的方法可以一定程度的解决这个问题 url='https://cl.xxxx.xyz/'+url try: response = requ ...
- 你了解 Java 的逃逸分析吗?
Java 的逃逸分析 1. 定义 逃逸分析(Escape Analysis)是 JVM 的一种优化技术,用于分析对象的作用域,从而决定对象的分配方式或优化手段. 主要目的是判断一个对象是否会逃离当前方 ...
- 把 Java WebApi 快速转为 Mcp-Server(使用 Solon AI MCP)
solon-ai-mcp,提供了各种 mcp 相关能力,支持 java8, java11, java17, java21, java24 .是 solon-ai 项目的重要组成部分,也可以嵌入到 sp ...
- C#网络编程(二)----网络层/链路层
网络层协议 网络层(Network Layer) 的主要功能是实现主机之间的逻辑寻址.路由选择和分组转发,确保数据在不同网络(如局域网.广域网)之间的传输 协议类别 核心协议 路由协议 辅助协议 扩展 ...
- Java System.arraycopy实现数组拷贝
在看ArrayList源码的时候发现用到了System.arraycopy方法. line 544 private void fastRemove(int index) { modCount++; i ...
- vue3 基础-API-响应式 ref, reactive
上篇咱介绍了 CompositionAPI, 其核心思想是直接在函数作用域内定义响应式状态变量,并将从多个函数中得到的状态组合起来处理复杂问题. 然后初介绍了 setup 函数的作用, 即其是在 cr ...
- vue3 基础-事件绑定 & 修饰符
无非就是 js 的一些 事件, 按键, 鼠标 等的一些绑定在 vue 的实现而已, 很好理解. 先来看一个基础例子. 事件初体验 <!DOCTYPE html> <html lang ...
- Pandas 实现 Excel 多列 转 多行
也是最近的一个需求, 将一个 Excel 表, 多列转多行, 就把那种行的, 业务人员经常搞的那种垃圾表,给它转为咱熟悉的数据库表的形式, 多列转多行. 还要帮他们处理数据, 恶心得一批, 其实也不一 ...
- Nginx No, Traefik Yes
As we all know, Nginx is a very popular reverse proxy server. It is very stable and has a lot of fea ...
- ASP.NET Core已有数据库,却新建项目
ASP.NET Core已有数据库,却新建项目,只需要构造出相应的类,DbContext,然后直接add-migration init即可!!而不用执行update-database,执行后者会报错: ...