主题
第3天:布尔值、运算符和日期
目录
布尔值
布尔数据类型表示两个值之一:true 或 false。布尔值要么是 true,要么是 false。当你开始使用比较运算符时,这些数据类型的用途就会变得清晰。任何比较都会返回一个布尔值,要么是 true,要么是 false。
示例:布尔值
js
let isLightOn = true
let isRaining = false
let isHungry = false
let isMarried = true
let truValue = 4 > 3 // true
let falseValue = 4 < 3 // false
我们约定布尔值要么是 true,要么是 false。
真值
- 所有数字(正数和负数)都是真值,除了零
- 所有字符串都是真值,除了空字符串 ('')
- 布尔值 true
假值
- 0
- 0n
- null
- undefined
- NaN
- 布尔值 false
- '', "", ``, 空字符串
记住这些真值和假值是很有用的。在后面的章节中,我们将在条件语句中使用它们来做决策。
Undefined
如果我们声明一个变量但没有赋值,那么这个值就是 undefined。此外,如果一个函数没有返回值,它也是 undefined。
js
let firstName
console.log(firstName) // undefined,因为还没有赋值
Null
js
let empty = null
console.log(empty) // -> null,表示没有值
运算符
赋值运算符
在 JavaScript 中,等号是赋值运算符。它用来给变量赋值。
js
let firstName = 'Asabeneh'
let country = 'Finland'
算术运算符
算术运算符是数学运算符。
- 加法(+): a + b
- 减法(-): a - b
- 乘法(*): a * b
- 除法(/): a / b
- 取模(%): a % b
- 指数(**): a ** b
js
let numOne = 4
let numTwo = 3
let sum = numOne + numTwo
let diff = numOne - numTwo
let mult = numOne * numTwo
let div = numOne / numTwo
let remainder = numOne % numTwo
let powerOf = numOne ** numTwo
console.log(sum, diff, mult, div, remainder, powerOf) // 7,1,12,1.33,1, 64
js
const PI = 3.14
let radius = 100 // 长度单位:米
// 计算圆的面积
const areaOfCircle = PI * radius * radius
console.log(areaOfCircle) // 314 平方米
const gravity = 9.81 // 单位:m/s2
let mass = 72 // 单位:千克
// 计算物体的重量
const weight = mass * gravity
console.log(weight) // 706.32 N(牛顿)
const boilingPoint = 100 // 水的沸点,单位:摄氏度
const bodyTemp = 37 // 人体体温,单位:摄氏度
// 使用字符串插值连接字符串和数字
console.log(
`水的沸点是 ${boilingPoint} 摄氏度。\n人体体温是 ${bodyTemp} 摄氏度。\n地球重力是 ${gravity} m/s2。`
)
比较运算符
在编程中我们比较值,我们使用比较运算符来比较两个值。我们检查一个值是否大于、小于或等于另一个值。
示例:比较运算符
js
console.log(3 > 2) // true,因为 3 大于 2
console.log(3 >= 2) // true,因为 3 大于 2
console.log(3 < 2) // false,因为 3 大于 2
console.log(2 < 3) // true,因为 2 小于 3
console.log(2 <= 3) // true,因为 2 小于 3
console.log(3 == 2) // false,因为 3 不等于 2
console.log(3 != 2) // true,因为 3 不等于 2
console.log(3 == '3') // true,只比较值
console.log(3 === '3') // false,比较值和数据类型
console.log(3 !== '3') // true,比较值和数据类型
console.log(3 != 3) // false,只比较值
console.log(3 !== 3) // false,比较值和数据类型
console.log(0 == false) // true,等价
console.log(0 === false) // false,不完全相同
console.log(0 == '') // true,等价
console.log(0 == ' ') // true,等价
console.log(0 === '') // false,不完全相同
console.log(1 == true) // true,等价
console.log(1 === true) // false,不完全相同
console.log(undefined == null) // true
console.log(undefined === null) // false
console.log(NaN == NaN) // false,不相等
console.log(NaN === NaN) // false
console.log(typeof NaN) // number
console.log('mango'.length == 'avocado'.length) // false
console.log('mango'.length != 'avocado'.length) // true
console.log('mango'.length < 'avocado'.length) // true
console.log('milk'.length == 'meat'.length) // true
console.log('milk'.length != 'meat'.length) // false
console.log('tomato'.length == 'potato'.length) // true
console.log('python'.length > 'dragon'.length) // false
尽量用逻辑来理解上面的比较。没有逻辑的记忆可能会很困难。
作为经验法则,如果一个值用 == 不为真,那么用 === 也不会相等。使用 === 比使用 == 更安全。
逻辑运算符
以下符号是常见的逻辑运算符: &&(与)、||(或)和 !(非)。 && 运算符只有当两个操作数都为真时才返回真。 || 运算符当任一操作数为真时就返回真。 ! 运算符将真变为假,将假变为真。
js
// && 与运算符示例
const check = 4 > 3 && 10 > 5 // true && true -> true
const check = 4 > 3 && 10 < 5 // true && false -> false
const check = 4 < 3 && 10 < 5 // false && false -> false
// || 或运算符示例
const check = 4 > 3 || 10 > 5 // true || true -> true
const check = 4 > 3 || 10 < 5 // true || false -> true
const check = 4 < 3 || 10 < 5 // false || false -> false
// ! 非运算符示例
let check = 4 > 3 // true
let check = !(4 > 3) // false
let isLightOn = true
let isLightOff = !isLightOn // false
let isMarried = !false // true
递增运算符
在 JavaScript 中,我们使用递增运算符来增加存储在变量中的值。递增可以是前递增或后递增。让我们看看每一种:
- 前递增
js
let count = 0
console.log(++count) // 1
console.log(count) // 1
- 后递增
js
let count = 0
console.log(count++) // 0
console.log(count) // 1
我们大多数时候使用后递增。至少你应该记住如何使用后递增运算符。
递减运算符
在 JavaScript 中,我们使用递减运算符来减少存储在变量中的值。递减可以是前递减或后递减。让我们看看每一种:
- 前递减
js
let count = 0
console.log(--count) // -1
console.log(count) // -1
- 后递减
js
let count = 0
console.log(count--) // 0
console.log(count) // -1
三元运算符
三元运算符允许编写条件语句。 编写条件语句的另一种方法是使用三元运算符。看看下面的例子:
js
let isRaining = true
isRaining
? console.log('你需要雨衣。')
: console.log('不需要雨衣。')
isRaining = false
isRaining
? console.log('你需要雨衣。')
: console.log('不需要雨衣。')
js
let number = 5
number > 0
? console.log(`${number} 是正数`)
: console.log(`${number} 是负数`)
number = -5
number > 0
? console.log(`${number} 是正数`)
: console.log(`${number} 是负数`)
运算符优先级
建议你从这个链接阅读关于运算符优先级的内容。
Window 方法
Window alert() 方法
正如你在开始时看到的,alert() 方法显示一个带有指定消息和确定按钮的警告框。它是一个内置方法,接受一个参数。
js
alert(message)
js
alert('欢迎来到 30 天 JavaScript 学习')
不要过度使用 alert,因为它会破坏用户体验并且很烦人,只在测试时使用。
Window prompt() 方法
window prompt 方法在浏览器中显示一个带有输入框的提示框来获取输入值,输入的数据可以存储在变量中。prompt() 方法接受两个参数。第二个参数是可选的。
js
prompt('必需的文本', '可选的文本')
js
let number = prompt('输入数字', '数字在这里')
console.log(number)
Window confirm() 方法
confirm() 方法显示一个带有指定消息以及确定和取消按钮的对话框。 确认框通常用于请求用户执行某些操作的权限。Window confirm() 接受一个字符串作为参数。 点击确定返回 true 值,而点击取消按钮返回 false 值。
js
const agree = confirm('你确定要删除吗?')
console.log(agree) // 根据你在对话框中点击的内容,结果将是 true 或 false
这些不是所有的 window 方法,我们将有一个单独的章节深入了解 window 方法。
Date 对象
时间是很重要的。我们喜欢知道某个活动或事件的时间。在 JavaScript 中,当前时间和日期是使用 JavaScript Date 对象创建的。我们使用 Date 对象创建的对象提供了许多处理日期和时间的方法。我们用来从日期对象获取日期和时间信息的方法都以单词 get 开头,因为它提供信息。
创建时间对象
一旦我们创建了时间对象,时间对象将提供关于时间的信息。让我们创建一个时间对象:
js
const now = new Date()
console.log(now) // Sat Jan 04 2020 00:56:41 GMT+0200 (东欧标准时间)
我们已经创建了一个时间对象,我们可以使用我们在表中提到的 get 方法从对象中访问任何日期时间信息。
获取完整年份
让我们从时间对象中提取或获取完整年份。
js
const now = new Date()
console.log(now.getFullYear()) // 2020
获取月份
让我们从时间对象中提取或获取月份。
js
const now = new Date()
console.log(now.getMonth()) // 0,因为月份是一月,月份(0-11)
获取日期
让我们从时间对象中提取或获取月份中的日期。
js
const now = new Date()
console.log(now.getDate()) // 4,因为月份中的日期是第4天,日期(1-31)
获取星期
让我们从时间对象中提取或获取一周中的天。
js
const now = new Date()
console.log(now.getDay()) // 6,因为这天是星期六,是第7天
// 星期日是 0,星期一是 1,星期六是 6
// 获取工作日作为数字 (0-6)
获取小时
让我们从时间对象中提取或获取小时。
js
const now = new Date()
console.log(now.getHours()) // 0,因为时间是 00:56:41
获取分钟
让我们从时间对象中提取或获取分钟。
js
const now = new Date()
console.log(now.getMinutes()) // 56,因为时间是 00:56:41
获取秒数
让我们从时间对象中提取或获取秒数。
js
const now = new Date()
console.log(now.getSeconds()) // 41,因为时间是 00:56:41
获取时间戳
这个方法给出从 1970 年 1 月 1 日开始的毫秒时间。它也被称为 Unix 时间。我们可以用两种方式获取 unix 时间:
- 使用 getTime()
js
const now = new Date()
console.log(now.getTime()) // 1578092201341,这是从 1970 年 1 月 1 日到 2020 年 1 月 4 日 00:56:41 经过的毫秒数
- 使用 Date.now()
js
const allSeconds = Date.now()
console.log(allSeconds) // 1578092201341,这是从 1970 年 1 月 1 日到 2020 年 1 月 4 日 00:56:41 经过的毫秒数
const timeInSeconds = new Date().getTime()
console.log(allSeconds == timeInSeconds) // true
让我们将这些值格式化为人类可读的时间格式。
示例:
js
const now = new Date()
const year = now.getFullYear() // 返回年份
const month = now.getMonth() + 1 // 返回月份(0 - 11)
const date = now.getDate() // 返回日期 (1 - 31)
const hours = now.getHours() // 返回数字 (0 - 23)
const minutes = now.getMinutes() // 返回数字 (0 -59)
console.log(`${date}/${month}/${year} ${hours}:${minutes}`) // 4/1/2020 0:56
练习
练习:第1级
声明 firstName、lastName、country、city、age、isMarried、year 变量并赋值,使用 typeof 运算符检查不同的数据类型。
检查 '10' 的类型是否等于 10
检查 parseInt('9.8') 是否等于 10
布尔值要么是 true,要么是 false。
- 写三个提供真值的 JavaScript 语句。
- 写三个提供假值的 JavaScript 语句。
在不使用 console.log() 的情况下,先找出以下比较表达式的结果。在你决定结果后,使用 console.log() 确认它
- 4 > 3
- 4 >= 3
- 4 < 3
- 4 <= 3
- 4 == 4
- 4 === 4
- 4 != 4
- 4 !== 4
- 4 != '4'
- 4 == '4'
- 4 === '4'
- 找到 python 和 jargon 的长度并做一个假值比较语句。
在不使用 console.log() 的情况下,先找出以下表达式的结果。在你决定结果后,使用 console.log() 确认
- 4 > 3 && 10 < 12
- 4 > 3 && 10 > 12
- 4 > 3 || 10 < 12
- 4 > 3 || 10 > 12
- !(4 > 3)
- !(4 < 3)
- !(false)
- !(4 > 3 && 10 < 12)
- !(4 > 3 && 10 > 12)
- !(4 === '4')
使用 Date 对象进行以下活动
- 今年是哪一年?
- 今天是几月(数字)?
- 今天是几号?
- 今天是星期几(数字)?
- 现在是几点?
- 现在是几分?
- 找出从 1970 年 1 月 1 日到现在经过的秒数。
练习:第2级
编写一个脚本,提示用户输入三角形的底边和高,并计算三角形的面积(面积 = 0.5 x 底边 x 高)。
编写一个脚本,提示用户输入三角形的三边 a、b、c,并计算三角形的周长(周长 = a + b + c)
使用 prompt 获取长度和宽度,计算矩形的面积(面积 = 长度 x 宽度)和矩形的周长(周长 = 2 x (长度 + 宽度))
使用 prompt 获取半径,计算圆的面积(面积 = pi x r x r)和圆的周长(c = 2 x pi x r),其中 pi = 3.14。
计算 y = 2x - 2 的斜率、x 截距和 y 截距
斜率是 m = (y₂-y₁)/(x₂-x₁)。找到点 (2, 2) 和点 (6,10) 之间的斜率
比较上面两个问题的斜率。
计算 y 的值(y = x² + 6x + 9)。尝试使用不同的 x 值,找出在什么 x 值时 y 为 0。
编写一个脚本,提示用户输入小时数和每小时费率。计算这个人的工资?
如果你的名字长度大于 7,说你的名字很长,否则说你的名字很短。
比较你的名字长度和姓氏长度,你应该得到这样的输出。
声明两个变量 myAge 和 yourAge,给它们赋初始值。
使用 prompt 获取用户出生年份,如果用户 18 岁或以上,允许用户开车,如果不是,告诉用户等待一定年数。
编写一个脚本,提示用户输入生活年数。计算一个人可以活的秒数。假设某人只活一百年
使用 Date 时间对象创建人类可读的时间格式
- YYYY-MM-DD HH:mm
- DD-MM-YYYY HH:mm
- DD/MM/YYYY HH:mm
练习:第3级
- 使用 Date 时间对象创建人类可读的时间格式。小时和分钟应该始终是两位数(7 小时应该是 07,5 分钟应该是 05)
- YYY-MM-DD HH:mm 例如 20120-01-02 07:05