数据类型
数据类型描述了数据的特征。数据类型可以分为两类:
- 原始数据类型
- 非原始数据类型(对象引用)
原始数据类型
JavaScript 中的原始数据类型包括:
- 数字 - 整数、浮点数
- 字符串 - 任何用单引号、双引号或反引号括起来的数据
- 布尔值 - true 或 false 值
- Null - 空值或无值
- Undefined - 一个已声明但未赋值的变量
- Symbol - 通过 Symbol 构造函数生成的唯一值
JavaScript 中的非原始数据类型包括:
- 对象
- 数组
原始数据类型是不可变的(不可修改)数据类型。一旦创建了原始数据类型,就无法修改它。
示例:
let word = 'JavaScript'
如果我们尝试修改存储在变量 word 中的字符串,JavaScript 应该会引发错误。任何用单引号、双引号或反引号括起来的数据类型都是字符串数据类型。
word[0] = 'Y'
这个表达式不会改变存储在变量 word 中的字符串。因此,我们可以说字符串是不可修改的,换句话说是不可变的。
原始数据类型是通过它的值进行比较的。让我们比较不同的数据值。请参见下面的示例:
let numOne = 3
let numTwo = 3
console.log(numOne == numTwo) // true
let js = 'JavaScript'
let py = 'Python'
console.log(js == py) // false
let lightOn = true
let lightOff = false
console.log(lightOn == lightOff) // false
非原始数据类型
非原始数据类型是可修改或可变的。我们可以在创建非原始数据类型后修改其值。
让我们通过创建一个数组来看看。数组是方括号中的数据值列表。数组可以包含相同或不同的数据类型。数组值通过它们的索引来引用。在 JavaScript 中,数组索引从零开始。即数组的第一个元素在索引零处,第二个元素在索引一处,第三个元素在索引二处,依此类推。
let nums = [1, 2, 3]
nums[0] = 10
console.log(nums) // [10, 2, 3]
数组作为非原始数据类型是可变的。非原始数据类型不能通过值进行比较。即使两个非原始数据类型具有相同的属性和值,它们也不严格相等。
let nums = [1, 2, 3]
let numbers = [1, 2, 3]
console.log(nums == numbers) // false
let userOne = {
name:'Asabeneh',
role:'teaching',
country:'Finland'
}
let userTwo = {
name:'Asabeneh',
role:'teaching',
country:'Finland'
}
console.log(userOne == userTwo) // false
经验法则是我们不比较非原始数据类型。不要比较数组、函数或对象。
非原始值被称为引用类型,因为它们是通过引用而不是值进行比较的。只有当两个对象引用同一个底层对象时,它们才严格相等。
let nums = [1, 2, 3]
let numbers = nums
console.log(nums == numbers) // true
let userOne = {
name:'Asabeneh',
role:'teaching',
country:'Finland'
}
let userTwo = userOne
console.log(userOne == userTwo) // true
如果你难以理解原始数据类型和非原始数据类型之间的区别,你并不是唯一的一个。冷静下来,继续阅读下一节,稍后再回头看看。
数字
数字是整数和小数值,可以进行所有的算术运算。
声明数字数据类型
let age = 35
const gravity = 9.81 // 我们使用 const 声明不变的值,如重力常数,单位为 m/s²
let mass = 72 // 质量,单位为千克
const PI = 3.14 // pi 是一个几何常数
// 更多示例
const boilingPoint = 100 // 水的沸点,单位为摄氏度
const bodyTemp = 37 // 平均人体温度,单位为摄氏度
console.log(age, gravity, mass, PI, boilingPoint, bodyTemp)
Math 对象
在 JavaScript 中,Math 对象提供了许多处理数字的方法。
const PI = Math.PI
console.log(PI) // 3.141592653589793
// 四舍五入到最接近的数
// 如果大于0.5,向上舍入,如果小于0.5,向下舍入
console.log(Math.round(PI)) // 3,舍入到最接近的数
console.log(Math.round(9.81)) // 10
console.log(Math.floor(PI)) // 3,向下舍入
console.log(Math.ceil(PI)) // 4,向上舍入
console.log(Math.min(-5, 3, 20, 4, 5, 10)) // -5,返回最小值
console.log(Math.max(-5, 3, 20, 4, 5, 10)) // 20,返回最大值
const randNum = Math.random() // 生成 0 到 0.999999 之间的随机数
console.log(randNum)
// 让我们创建一个 0 到 10 之间的随机数
const num = Math.floor(Math.random() * 11) // 生成 0 到 10 之间的随机数
console.log(num)
// 绝对值
console.log(Math.abs(-10)) // 10
// 平方根
console.log(Math.sqrt(100)) // 10
console.log(Math.sqrt(2)) // 1.4142135623730951
// 幂
console.log(Math.pow(3, 2)) // 9
console.log(Math.E) // 2.718
// 对数
// 返回以 E 为底的自然对数,Math.log(x)
console.log(Math.log(2)) // 0.6931471805599453
console.log(Math.log(10)) // 2.302585092994046
// 分别返回 2 和 10 的自然对数
console.log(Math.LN2) // 0.6931471805599453
console.log(Math.LN10) // 2.302585092994046
// 三角函数
Math.sin(0)
Math.sin(60)
Math.cos(0)
Math.cos(60)
随机数生成器
JavaScript 的 Math 对象有一个 random() 方法,可以生成 0 到 0.999999999… 之间的随机数。
let randomNum = Math.random() // 生成 0 到 0.999... 之间的随机数
生成 0 到 10 之间的随机数:
let randomNum = Math.random() // 生成 0 到 0.999 之间的随机数
let numBtnZeroAndTen = randomNum * 11
console.log(numBtnZeroAndTen) // 结果为:最小 0,最大 10.99
let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen)
console.log(randomNumRoundToFloor) // 结果为 0 到 10 之间
字符串
字符串是文本,放在单引号、双引号或反引号中。要声明一个字符串,我们需要一个变量名、赋值操作符和一个用单引号、双引号或反引号括起来的值。
let space = ' ' // 一个空格字符串
let firstName = 'Asabeneh'
let lastName = 'Yetayeh'
let country = 'Finland'
let city = 'Helsinki'
let language = 'JavaScript'
let job = 'teacher'
let quote = "The saying,'Seeing is Believing' is not correct in 2020."
let quotWithBackTick = `The saying,'Seeing is Believing' is not correct in 2020.`
字符串拼接
连接两个或多个字符串称为拼接。
使用在前面的字符串部分中声明的字符串:
let fullName = firstName + space + lastName; // 拼接,将使用 + 运算符连接两个字符串
console.log(fullName)
我们还可以连接包括数字在内的不同数据类型。
let age = 100;
let fullName = firstName + space + lastName + '. I am ' + age + ' years old.' ;
console.log(fullName)
长字符串和换行符
字符串值可以非常长。我们使用反斜杠字符 () 指示代码行继续:
const paragraph = "My name is Asabeneh Yetayeh. I live in Finland, Helsinki. \
I am a teacher and I love teaching. I teach HTML, CSS, JavaScript, React, Redux, \
Node.js, Python, Data Analysis, D3.js, and more. I am now enjoying learning \
React Native."
console.log(paragraph)
转义字符序列
在字符串中我们可以使用转义字符来表示特殊字符。
\n: 换行
\t: 制表符,水平制表符
\\: 反斜杠
\': 单引号(撇号)
\": 双引号
console.log('I hope everyone is enjoying the 30 Days Of JavaScript challenge.\nDo you ?') // 换行
console.log('Days\tTopics\tExercises')
console.log('Day 1\t3\t5')
console.log('Day 2\t3\t5')
console.log('Day 3\t3\t5')
console.log('Day 4\t3\t5')
console.log('This is a backslash symbol (\\)') // To write a backslash
console.log('In every programming language it starts with \"Hello, World!\"')
console.log("In every programming language it starts with \'Hello, World!\'")
模板字符串 (Template Literals)
在 JavaScript 中,我们可以使用反引号()和插值表达式 ${}` 创建模板字符串。 让我们用模板字符串重写之前的字符串拼接示例:
let a = 2
let b = 3
console.log(`${a} is greater than ${b}: ${a > b}`)