Skip to content

第3天:布尔值、运算符和日期

目录

布尔值

布尔数据类型表示两个值之一:truefalse。布尔值要么是 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 中,我们使用递增运算符来增加存储在变量中的值。递增可以是前递增或后递增。让我们看看每一种:

  1. 前递增
js
let count = 0
console.log(++count)        // 1
console.log(count)          // 1
  1. 后递增
js
let count = 0
console.log(count++)        // 0
console.log(count)          // 1

我们大多数时候使用后递增。至少你应该记住如何使用后递增运算符。

递减运算符

在 JavaScript 中,我们使用递减运算符来减少存储在变量中的值。递减可以是前递减或后递减。让我们看看每一种:

  1. 前递减
js
let count = 0
console.log(--count) // -1
console.log(count)  // -1
  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 时间:

  1. 使用 getTime()
js
const now = new Date()
console.log(now.getTime()) // 1578092201341,这是从 1970 年 1 月 1 日到 2020 年 1 月 4 日 00:56:41 经过的毫秒数
  1. 使用 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级

  1. 声明 firstName、lastName、country、city、age、isMarried、year 变量并赋值,使用 typeof 运算符检查不同的数据类型。

  2. 检查 '10' 的类型是否等于 10

  3. 检查 parseInt('9.8') 是否等于 10

  4. 布尔值要么是 true,要么是 false。

    1. 写三个提供真值的 JavaScript 语句。
    2. 写三个提供假值的 JavaScript 语句。
  5. 在不使用 console.log() 的情况下,先找出以下比较表达式的结果。在你决定结果后,使用 console.log() 确认它

    1. 4 > 3
    2. 4 >= 3
    3. 4 < 3
    4. 4 <= 3
    5. 4 == 4
    6. 4 === 4
    7. 4 != 4
    8. 4 !== 4
    9. 4 != '4'
    10. 4 == '4'
    11. 4 === '4'
    12. 找到 python 和 jargon 的长度并做一个假值比较语句。
  6. 在不使用 console.log() 的情况下,先找出以下表达式的结果。在你决定结果后,使用 console.log() 确认

    1. 4 > 3 && 10 < 12
    2. 4 > 3 && 10 > 12
    3. 4 > 3 || 10 < 12
    4. 4 > 3 || 10 > 12
    5. !(4 > 3)
    6. !(4 < 3)
    7. !(false)
    8. !(4 > 3 && 10 < 12)
    9. !(4 > 3 && 10 > 12)
    10. !(4 === '4')
  7. 使用 Date 对象进行以下活动

    1. 今年是哪一年?
    2. 今天是几月(数字)?
    3. 今天是几号?
    4. 今天是星期几(数字)?
    5. 现在是几点?
    6. 现在是几分?
    7. 找出从 1970 年 1 月 1 日到现在经过的秒数。

练习:第2级

  1. 编写一个脚本,提示用户输入三角形的底边和高,并计算三角形的面积(面积 = 0.5 x 底边 x 高)。

  2. 编写一个脚本,提示用户输入三角形的三边 a、b、c,并计算三角形的周长(周长 = a + b + c)

  3. 使用 prompt 获取长度和宽度,计算矩形的面积(面积 = 长度 x 宽度)和矩形的周长(周长 = 2 x (长度 + 宽度))

  4. 使用 prompt 获取半径,计算圆的面积(面积 = pi x r x r)和圆的周长(c = 2 x pi x r),其中 pi = 3.14。

  5. 计算 y = 2x - 2 的斜率、x 截距和 y 截距

  6. 斜率是 m = (y₂-y₁)/(x₂-x₁)。找到点 (2, 2) 和点 (6,10) 之间的斜率

  7. 比较上面两个问题的斜率。

  8. 计算 y 的值(y = x² + 6x + 9)。尝试使用不同的 x 值,找出在什么 x 值时 y 为 0。

  9. 编写一个脚本,提示用户输入小时数和每小时费率。计算这个人的工资?

  10. 如果你的名字长度大于 7,说你的名字很长,否则说你的名字很短。

  11. 比较你的名字长度和姓氏长度,你应该得到这样的输出。

  12. 声明两个变量 myAgeyourAge,给它们赋初始值。

  13. 使用 prompt 获取用户出生年份,如果用户 18 岁或以上,允许用户开车,如果不是,告诉用户等待一定年数。

  14. 编写一个脚本,提示用户输入生活年数。计算一个人可以活的秒数。假设某人只活一百年

  15. 使用 Date 时间对象创建人类可读的时间格式

    1. YYYY-MM-DD HH:mm
    2. DD-MM-YYYY HH:mm
    3. DD/MM/YYYY HH:mm

练习:第3级

  1. 使用 Date 时间对象创建人类可读的时间格式。小时和分钟应该始终是两位数(7 小时应该是 07,5 分钟应该是 05)
    1. YYY-MM-DD HH:mm 例如 20120-01-02 07:05