【JavaScript入门笔记02 基本知识Ⅲ】

这篇博客介绍了JavaScript在浏览器环境下的交互方式,包括alert、prompt和confirm函数的使用。接着,文章讨论了JavaScript中的类型转换,特别是字符串、数字和布尔型的转换规则。此外,还详细讲解了基础运算符的用法,如数学运算、+运算符的多重含义以及自增/自减运算符。最后,文章阐述了值的比较,包括比较运算符的工作原理、字符串比较和不同类型之间的比较规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔记参考javascript.info中文站

浏览器环境下的交互

1. alert

前面的笔记中已经出现过这个函数,它会显示一条信息,并等待用户按下 “确认”,弹出的这个带有信息的小窗口被称为 ”模态窗“ ,在用户处理完这个 “modal” 前,他们无法与其他部分交互,举个例子:

alert("Hello"); // 不回应别人打招呼是很不礼貌的行为
2. prompt

prompt 函数接收两个参数:prompt(title, [default]),其中带中括号的default参数可选, prompt 函数可以显示一个 input 框,让用户输入数据,随后将输入的内容赋值给对应变量。

title 是显示给用户看的文本
default 是指定 input 框的初始值。

举个例子:

 let age = prompt('How old are you?', 100);
alert(`You are ${age} years old!`); // You are 100 years old!

当用户取消输入,或者按ESC取消输入时,返回 null 值

当我们没有设置第二个参数 default 时,现代浏览器会默认赋值 undefined ,但是在使用IE时请注意,IE没有这个功能

3. confirm

正如其名:确认
confirm 函数有一个参数(字符串形式),调用函数时会在模态窗中显示该参数的内容,用户点击 “确认” 对应变量则赋值 true ,选择 “取消” 则赋值 false

举个例子:

let isBoss = confirm("Are you the boss?");
alert( isBoss ); // 如果“确定”按钮被按下,则显示 true

confirm 函数的参数一般是一个 Question,让用户去 confirm



类型转换

大多数情况下,运算符和函数会自动将赋予它们的值转换为正确的类型,例如 alert 函数会将参数转化成字符串类型。

但有些情况下我们需要手动显式转换类型:

1. 字符串转换
let value = true;// 声明一个布尔变量,赋值为真
alert(typeof value); // boolean

value = String(value); // 现在,值是一个字符串形式的 "true"
alert(typeof value); // string
2. 数字型转换
let str0 = "123";// 声明一个字符串,赋值为“123”
let str1 = "balabala"// 声明一个字符串,赋值为"balabala"
alert(typeof str0); // string
alert(typeof str1); // string

let num0 = Number(str0); // 变成 number 类型 值为123
alert(typeof num0); // number
alert(num0);// 123

let num1 = Number(str1);// 变成 number 类型 值为NaN
alert(typeof num1); // number
alert(age); // NaN,字符串无法变成确切的数字

Number类型转换的值存在下述规则:

转换为
undfinedNaN
null0
true1
false0
string纯数字则转成对应数字(去空格),非纯数字则NaN,空字符串则 0
3. 布尔型转换
alert( Boolean(1) ); // true
alert( Boolean(0) ); // false

alert( Boolean("hello") ); // true
alert( Boolean("") ); // false

空则0,非空则1
null、undefined、空字符等 即空
数字、非空字符串等 即非空

只含有一个空格的字符串也非空



基础运算符

1. 术语
  • 运算元:运算符应用的对象
  • 一元运算符:只拥有一个运算元的运算符
  • 二元运算符:拥有两个运算元的运算符
2. 数学运算
  • 加法 +
  • 减法 -
  • 乘法 *
  • 除法 /
  • 取余 %
  • 求幂 **
3. + 运算符

+运算符有三种意义

  1. 数学加法,二元运算符
  2. 字符串连接,二元运算符
let s = "my" + "string";
alert(s); // mystring

两个运算符中有一个是字符串则另一个运算符自动转成字符串

alert( '1' + 2 ); // "12"

注意:运算符是按顺序工作

// 先加法,再连接
alert(2 + 2 + '1' ); // "41",不是 "221"

// 先连接,再连接(第一次连接后又成了新字符串“12”)
alert('1' + 2 + 2); // "122",不是 "14"
  1. 数字转化,一元运算符
    加号 + 应用于单个值,对数字没有任何作用。但是如果运算元不是数字,加号 + 则会将其转化为数字,举个例子:
// 对数字无效
let x = 1;
alert( +x ); // 1

// 转化非数字
alert( +true ); // 1
alert( +"" );   // 0

let apples = "2";
let oranges = "3";
// 在二元运算符加号起作用之前,所有的值都被转化为了数字
alert( +apples + +oranges ); // 5

// 与Number(),显式类型转换函数效果相同,但更简洁
alert( Number(apples) + Number(oranges) ); // 5
4. 优先级

我们只需要知道基础优先级和 “一元运算优先级高于二元运算” 即可,其余优先级可参考优先级表或自行百度。

5. 赋值运算符

赋值符号 = 也是一个运算符,从优先级表中可以看到它的优先级非常低,几乎所有运算都完成后才会赋值。

在 JavaScript 中,所有运算符都会返回一个值,= 也是一样,语句 x = value 将值 value 写入 x 然后返回 value,因此只要出现了 = ,一定有对应的被赋值的变量:

let a = 1;
let b = 2;

let c = 3 - (a = b + 1);

alert( a ); // 3,3也被返回了,尽管a只是一个中间值
alert( c ); // 0

我们也可以进行链式赋值,同时给多个变量赋同一个值

let a, b, c;
a = b = c = 2 + 2;// 注意,这些运算符都是按顺序和优先级运算的,优先级高的先运算,靠右的先运算

alert( a ); // 4
alert( b ); // 4
alert( c ); // 4
6. 原地修改

我们经常需要对一个变量做运算,并将新的结果存储在同一个变量中,如 n = n + 5
因此Javascript设计了缩写,可以使用运算符 += 和 *= 来缩写这种表示

let n = 2;
n += 5; // 现在 n = 7(等同于 n = n + 5)
n *= 2; // 现在 n = 14(等同于 n = n * 2)
n *= 3 + 2; // 现在n = 70(右边部分先被计算,等同于 n *= 8)
alert(n); // 70
7. 自增/自减

分别对应 ++ 运算符和 - - 运算符

let counter = 2;
counter++;      // 和 counter = counter + 1 效果一样,但是更简洁
alert( counter ); // 3

counter--;      // 和 counter = counter - 1 效果一样,但是更简洁
alert( counter ); // 2

自增/自减只能应用于变量,比如 5++ 则会报错。

注意,还可以这样写:++counter--counter,分别被称为 “前置形式” 和 “后置形式”
它们的区别是,前置形式返回一个新的值,但后置返回原来的值,举个例子

let counter = 1;
let a = ++counter; // 返回 ++ 后的结果

alert(a); // 2
let counter = 1;
let a = counter++; // 返回 ++ 前的结果

alert(a); // 1
8. 位运算符和逗号运算符
  • 位运算符
    位运算符把运算元当做 32 位整数,并在它们的二进制表现形式上操作,如按位与 ( & )、按位或 ( | )等,不常用。

  • 逗号运算符
    逗号运算符能让我们处理多个语句,使用 “,” 将它们分开,举个例子

// 一行上有三个运算符
for (a = 1, b = 3, c = a * b; a < 10; a++) {
 ...
}

写起来方便,读起来难,也不常用



值的比较

1. 比较的结果

比较大小的运算符包括 >、<、≥、≤、==、!=
比较的结果只可能是正确 true,或错误 false,也就是布尔类型

let result = 5 > 4; // 把比较的结果赋值给 result
alert( result ); // true
2. 字符串比较

字符串比较采用Unicode 编码顺序,从头开始按字母顺序,一位位比,相等则比下一位,直至结尾都相等则相等,一方没有字符了则判定为 “小”。

注意,同位小写字母比大写字母大,“a” > “A”

alert( 'Z' > 'A' ); // true
alert( 'Glow' > 'Glee' ); // true
alert( 'Bee' > 'Be' ); // true
3. 不同类型的比较

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

alert( '2' > 1 ); // true,字符串 '2' 会被转化为数字 2
alert( '01' == 1 ); // true,字符串 '01' 会被转化为数字 1
alert( true == 1 ); // true
4. 严格相等

有的时候,不同类型比较自动转成Number比较这一点并不方便,比如无法区分空字符串和 false

alert( "" == false ); // true

这时候就需要用到另一种比较概念:严格相等 / 严格不相等,符号是 === / !==
首先判定是否同类型,不同直接返回 false,不转化成Number

这样做可以增加可读性,避免奇怪的错误

5. null 和 undefined 的比较

null 和 undefined 不同类型,因此严格比较不相等

但有趣的是,二者非严格比较相等,我们知道,null 的 Number转化是 0,而 undefined 转化后是 NaN ,二者并不相等,但是 Javascript 对此做出了特殊规定:

// 二者不会进行类型转换,直接判定
alert( null == undefined ); // true

在此规则下,null,undefined,0 三者之间的比较变得格外热闹

alert( null > 0 );  // (1) false,null转化成数字0
alert( null == 0 ); // (2) false,null在==比较下不转化成数字,null 和 undefined有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值
alert( null >= 0 ); // (3) true,null转化成数字0

alert( undefined > 0 ); // false,undefined 转换成 Number 类型 NaN
alert( undefined < 0 ); // false,undefined 转换成 Number 类型 NaN
alert( undefined == 0 ); // false,undefined 在 == 比较下不转化成数字,null 和 undefined有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值

这些规则有些古怪,即使经常和 Javascript 打交道的程序员可能会渐渐习惯熟悉这些规则,但是我们依然建议尽量避免null,undefined,0 三者之间的比较,尤其是大于小于的比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值