当前位置: 首页 > news >正文

JavaScript高级程序设计基础(二)

二、语言基础

2.1语法

(简单的语法基础将在文章省略)

2.1.1严格模式

严格模式是一种不同的 JavaScript 解析和执行模型,不规范写法在这种模式下会被处理
只需在脚本开头加上"use strict"
也可以单独指定一个函数在严格模式下执行,只要把这个预处理指令放到函数体开头即可
function doSomething() { "use strict"; // 函数体 
}

2.1.2语句

ECMAScript 中的语句以分号结尾有助于避免内容不完整,压缩代码,提升性能

2.2变量

2.2.1var

var操作符定义的变量会成为包含它的函数的局部变量。如果在函数内省略var操作符,就会成为全局变量(不建议)

var具有声明提升,此外,可以反复多次用var声明同一个变量

2.2.2 let

let 声明的范围是块作用域,且不允许出现冗余声明。

 var和let区别:

var是函数作用域,let是块作用域

if (true) { var name = 'Matt'; console.log(name); // Matt 
} 
console.log(name); // Mattif (true) { let age = 26; console.log(age); // 26 
} 
console.log(age); // ReferenceError: age 没有定义

(JavaScript 引擎会记录用于变量声明的标识符及其所在的块作用域,嵌套使用相同的标识符不会报错)

let age=26
if(true){let age=30;console.log(age)//30
}

1.暂时性死区

在let中,如果引用未声明的变量,则会抛出ReferenceError,并且将其称为暂时性死区

2.全局声明

var 关键字不同,使用 let 在全局作用域中声明的变量不会成为 window 对象的属性

3.条件声明

因为 let 的作用域是块,所以不可能检查前面是否已经使用 let 声明过同名变量,同时也就不可能在没有声明的情况下声明它(参考暂时性死区)

<script>  let age = 26; 
</script> 
<script> // 假设脚本不确定页面中是否已经声明了同名变量// 那它可以假设还没有声明过,即age=26还未被声明过let age = 36; // age 之前声明过,这里会报错
</script>

4.for循环中的let声明

在let出现之前,一直用的var声明i,则将会导致,i渗透到循环体外部

for (var i = 0; i < 5; ++i) { setTimeout(() => console.log(i), 0) 
}
// 实际上会输出 5、5、5、5、5for (let i = 0; i < 5; ++i) { setTimeout(() => console.log(i), 0) 
} 
// 会输出 0、1、2、3、4

 执行超时逻辑会被放在循环结束之后,此时var则是退出循环的值:5。而如果使用let,那么每次循环都会有一个新的let,赋值分别为0,1,2,3,4

2.2.3 const

显著区别:声明变量时必须同时初始化变量

1.const后续不能修改变量,不能重复声明

2.const的作用域是块

const name='123'
if(true){
const name='11'
}
console.log(name) //123

3.const 声明的限制

const 声明的限制只适用于它指向的变量的引用。换句话说,如果 const 变量引用的是一个对象,
那么修改这个对象内部的属性并不违反 const 的限制
虽然for循环不能用const来声明迭代变量
但是可以将const 用于for...in和for...of,相当于每次循环都创建了一个新的const

建议使用变量声明优先级:const>let>var

2.3数据类型

ECMAScript 6 种简单数据类型(也称为 原始类型 ): Undefined Null Boolean Number
String 和 Symbol。还有一种复杂数据类型叫 Object

2.3.1typeof

typeof 是一个操作符而不是函数
console.log(typeof '123')//string

注意:调用typeof null 返回的是"object"。这是因为特殊值 null 被认为是一个对空对象的引用

严格来讲,函数在 ECMAScript 中被认为是对象。
可是, 函数也有自己特殊的属性。为此,就有必要通过 typeof 操作符来区分函数和其他对象

2.3.2undefined类型

当使用 var let 声明了变量但没有初始化时,就相当于给变量赋予了 undefined
目的: 明确空对象指针( null )和未初始化变量的区别

但是未声明的变量使用typeof也是undefined,因为他们都属于无法执行实际操作

2.3.3null类型

注意: undefined 值是由 null 值派生而来的,因此 ECMA-262 将它们定义为表面上相等

 null 是一个假值,但也有其他可能是假值的情况

let message = null; 
let age; 
if (message) { // 这个块不会执行
} 
if (!message) { // 这个块会执行
} if (age) { // 这个块不会执行
} 
if (!age) { // 这个块会执行
}

 2.3.4boolean类型

(持续更新中~)

http://www.lryc.cn/news/435715.html

相关文章:

  • 使用Spring Boot开发自习室预定系统
  • 最近读书总结
  • python列表判断是否为空的三种方式
  • 二十三种模式之原型模式(类比制作陶器更好理解一些)
  • 9.9日记录
  • 鸿蒙交互事件开发04——手势事件
  • 研1日记9
  • HAL库学习目录查询表
  • pandas DataFrame日期字段数据处理
  • swift:qwen2 VL 多模态图文模型lora微调swift
  • Vue.js中computed的使用方法
  • python之pyecharts制作可视化数据大屏
  • Chrome、Edge、360及Firefox浏览器加载多个ActiveX插件的介绍
  • 裸金属服务器与云服务器的区别有哪些?
  • Pr:序列设置 - VR 视频
  • 采用qt做一个命令行终端
  • TQA相关
  • Spring Cloud之二 微服务注册
  • [Web安全 网络安全]-文件上传漏洞
  • 【白话Redis】缓存雪崩、穿透、击穿、失效和热点缓存重建
  • flink增量检查点降低状态依赖实现的详细步骤
  • Redis总结,是什么,干什么,怎么利用?
  • Vue3状态管理Pinia
  • box64 安装
  • OpenCV通过鼠标提前ROI(C++实现)
  • 6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)
  • 【智能终端】HBuilder X 与微信开发者工具集成与调试实战
  • 结构体的字节对齐方式(__attribute_pack(packed))#pragma pack())
  • 若依Ruoyi之智能售货机运营管理系统(新增运营运维工单管理)
  • ModuleNotFoundError: No module named ‘keras.layers.core‘怎么解决