JavaScript基础知识

110 阅读8分钟

JavaScript基础知识

变量

变量就是用来储存信息的

变量 是数据的“命名存储”。我们可以使用变量来保存商品、访客和其他信息

let user = 'John';
let age = 25;
let message = 'Hello'

介绍这个代码

letvue

关键字用来“声明”或“定义”变量。如代码第一行则声明了一个名称为“user”的变量后面的=为变量赋值添加数据(末尾用分号或逗号结束)

此处的“user”“age”“message”可以看作盒子,而“=”后面则为放入盒子中的东西

若重复输入则值会被改变,没重新输入一次则会改变一次

变量命名

JavaScript 的变量命名有两个限制:

  1. 变量名称必须仅包含字母,数字,符号 $ 和 _ 。
  2. 首字符必须非数字。
  3. 保留字无法用作变量命名(let class return function)
  4. 不能重复声明

变量命名还区分大小写

注意需采用use strict不然会报错

常量

声明一个常数(不变)变量,可以使用 const 而非 let :

使用 const 声明的变量称为“常量”。它们不能被修改,如果你尝试修改就会发现报错:

好处

  • COLOR_ORANGE 比 "#FF7F00" 更容易记忆。
  • 比起 COLOR_ORANGE 而言, "#FF7F00" 更容易输错。
  • 阅读代码时, COLOR_ORANGE 比 #FF7F00 更易懂。

总结:

  • 我们可以使用 var 、 let 或 const 声明变量来存储数据。
  • let — 现代的变量声明方式。
  • var — 老旧的变量声明方式。一般情况下,我们不会再使用它。但是,我们会在 旧时的 "var"
  • 章节介绍 var 和 let 的微妙差别,以防你需要它们。
  • const — 类似于 let ,但是变量的值无法被修改。
  • 变量应当以一种容易理解变量内部是什么的方式进行命名。

使用变量的小测式

  1. 声明两个变量: admin 和 name 。
  2. 将值 "John" 赋给 name 。
  3. 从 name 变量中拷贝其值给 admin 。
  4. 使用 alert 显示 admin 的值(必须输出 “John”)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p></p>
    <script>
       let name='john';
       let admin=name;
       alert(admin);
​
    </script>
    <p></p>
</body>
</html>

数据类型

number类型

number 类型代表整数和浮点数

  • Infinity 代表数学概念中的 无穷大或用1/0
  • NaN 代表一个计算错误。它是一个不正确的或者一个未定义的数学操作所得到的结果
  • NaN 是粘性的。任何对 NaN 的进一步操作都会返回 NaN

biglnt类型

BigInt 类型是最近被添加到 JavaScript 语言中的,用于表示任意长度的整数。可以通过将 n 附加到整数字段的末尾来创建 BigInt 值。

string类型

javaScript 中的字符串必须被括在引号里

双引号单引号都是“简单”引用,在 JavaScript 中两者几乎没有什么差别

反引号是 功能扩展 引号。它们允许我们通过将变量和表达式包装在 ${…} 中,来将它们嵌入到字 符串中

可以在 ${…} 内放置任何东西

null值

JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值(不属于任何一种类型)

undefined值

undefined 的含义是 未被赋值

如果一个变量已被声明,但未被赋值,那么它的值就是 undefined

object类型和symbol类型

object 类型是一个特殊的类型

object 则用于储存数据集合和更复杂的实体

symbol 类型用于创建对象的唯一标识符

typeof运算符

两种语法形式:

1作为运算符:typeof x

2函数形式:typeof(x)

typeof x 的调用会以字符串的形式返回数据类型

总结

JavaScript 中有八种基本的数据类型(译注:前七种为基本数据类型,也称为原始类型,而 object 为复杂数据类型)。

  • number 用于任何类型的数字:整数或浮点数,在 ±(253-1) 范围内的整数。
  • bigint 用于任意长度的整数。
  • string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。
  • boolean 用于 true 和 false 。
  • null 用于未知的值 —— 只有一个 null 值的独立类型。
  • undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。
  • symbol 用于唯一的标识符。
  • bject 用于更复杂的数据结构

交互:alert、prompt、confirm

alert

弹出窗口,我们称为模拟窗“modal” 意味着用户不能与页面的其他部分(例如点 击其他按钮等)进行交互,直到他们处理完窗口。在上面示例这种情况下 —— 直到用户点击“确 定”按钮。

prompt

prompt 函数接收两个参数

浏览器会显示一个带有文本消息的模态窗口,还有 input 框和确定/取消按钮。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p></p>
    <script>
     let  result=prompt("title,[default]");
    alert(result);
    </script>
    <p></p>
</body>
</html>

屏幕截图 2023-10-29 092615.png

confirm

confirm 函数显示一个带有 question 以及确定和取消两个按钮的模态窗口。 点击确定返回 true ,点击取消返回 false 。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p></p>
    <script>
     let  result=confirm("are you the boss?");
    alert(result);
    </script>
    <p></p>
</body>
</html>

屏幕截图 2023-10-29 093513.png

总结

我们学习了与用户交互的 3 个浏览器的特定函数: alert 显示信息。 prompt 显示信息要求用户输入文本。点击确定返回文本,点击取消或按下 Esc 键返回 null 。 confirm 显示信息等待用户点击确定或取消。点击确定返回 true ,点击取消或按下 Esc 键返回false 。

这些方法都是模态的:它们暂停脚本的执行,并且不允许用户与该页面的其余部分进行交互,直到窗口被解除。

上述所有方法共有两个限制

  1. 模态窗口的确切位置由浏览器决定。通常在页面中心。
  2. 窗口的确切外观也取决于浏览器。我们不能修改它。

类型转换

字符串转换

alert(value) 将 value 转换为字符串类型,然后显示值。 我们也可以显式地调用String(value) 来将 value 转换为字符串类型 变量.tostring() 但是一些数据类型不能使用该方法 加法 只要有一边是字符串就行

数字类型转换

在算术函数和表达式中,会自动进行 number 类型转换

let num = Number(str); // 变成 number 类型 123
alert(typeof num);

number类型转换规则

变成
undefinedNaN
null0
true和false1and0
string去掉首尾空格后的纯数字字符串中含有的数字。如果剩余字符串为空,则转换结果为 0 。否则,将会从剩余字 符串中“读取”数字。当类型转换出现 error 时返回 NaN

布尔型转换

转换规则

  • 直观上为“空”的值(如 0 、空字符串、 null 、 undefined和 NaN )将变为 false 。
  • 其他值变成 true 在js中只有''、0、null、undefined、NaN、这些是false,其余都是true

总结

字符串转换 —— 转换发生在输出内容的时候,也可以通过 String(value) 进行显式转换。原始类型值的 string 类型转换通常是很明显的

数字型转换 —— 转换发生在进行算术操作时,也可以通过 Number(value) 进行显式转换。数字型转换遵循以下规则

布尔型转换 —— 转换发生在进行逻辑操作时,也可以通过 Boolean(value) 进行显式转换。布尔型转换遵循以下规则:

上述的大多数规则都容易理解和记忆。人们通常会犯错误的值得注意的例子有以下几个:

  • 对 undefined 进行数字型转换时,输出结果为 NaN ,而非 0 。
  • 对 "0" 和只有空格的字符串(比如: " " )进行布尔型转换时,输出结果为 true

基础运算符--数学

数学

如果一个运算符对应的只有一个运算元,那么它是 一元运算符

如果一个运算符拥有两个运算元,那么它是 二元运算符

支持以下数学运算: 加法 + , 减法 - , 乘法 * , 除法 / , 取余 % , 求幂 **

加号 + 被应用于字符串,它将合并(连接)各个字符串

let s = "my" + "string";
alert(s); // mystring

==注意==:只要任意一个运算元是字符串,那么另一个运算元也将被转化为字符串

alert(2 + 2 + '1' ); // "41",不是 "221"

运算符是按顺序工作

它的效果和 Number(...) 相同,但是更加简短

故想要转换为数字类型的可以用+号

运算符优先级

一元运算符高于二元

赋值运算符

赋值符号 =

赋值 = 返回一个值

let a = 1;
let b = 2;
let c = 3 - (a = b + 1);
alert( a ); // 3
alert( c ); // 0

式子除了优先级外可以从右往左看

原地修改

let n = 2;
n = n + 5;
n = n * 2

自增/自减

运算符 ++ 和 -- 可以置于变量前,也可以置于变量后。 当运算符置于变量后,被称为“后置形式”: counter++ 。 当运算符置于变量前,被称为“前置形式”: ++counter

前置

let counter = 1;
let a = ++counter; // (*)
alert(a); // 2

后置

let counter = 1;
let a = counter++; // (*) 将 ++counter 改为 counter++
alert(a); // 1

位运算符

按位与 ( & ) 按位或 ( | ) 按位异或 ( ^ ) 按位非 ( ~ ) 左移 ( << ) 右移 ( >> ) 无符号右移 ( >>> )

值的比较

大于 / 小于: a > b , a < b 。 大于等于 / 小于等于: a >= b , a <= b 。 检查两个值的相等: a == b ,请注意双等号 == 表示相等性检查,而单等号 a = b 表示赋 值。 检查两个值不相等。不相等在数学中的符号是 ≠ ,但在 JavaScript 中写成 a != b

比较结果为boolean类型

所有比较运算符均返回布尔值

字符串的比较方法

  1. 首先比较两个字符串的首位字符大小。
  2. 如果一方字符较大(或较小),则该字符串大于(或小于)另一个字符串。算法结束。
  3. 否则,如果两个字符串的首位字符相等,则继续取出两个字符串各自的后一位字符进行比较。
  4. 重复上述步骤进行比较,直到比较完成某字符串的所有字符为止。
  5. 如果两个字符串的字符同时用完,那么则判定它们相等,否则未结束(还有未比较的字符)的 字符串更大

不同类型间的比较

当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小

严格相等

普通的相等性检查 == 存在一个问题,它不能区分出 0 和 false

相等判断符号 == 两侧的值会先被转化为数字

区分0和false 严格相等运算符 === 在进行比较时不会做任何的类型转换

总结

  • 比较运算符始终返回布尔值。
  • 字符串的比较,会按照“词典”顺序逐字符地比较大小。 当对不同类型的值进行比较时,它们会先被转化为数字(不包括严格相等检查)再进行比较。
  • 在非严格相等 == 下, null 和 undefined 相等且各自不等于任何其他的值。
  • 在使用 > 或 < 进行比较时,需要注意变量可能为 null/undefined 的情况。比较好的方法 是单独检查变量是否等于 null/undefined 。