js数据类型
- number 数值类型
- string 字符串类型
- boolean 布尔值类型
- object 对象
- function 函数
- undefined 未定义
- null 空
- symbol
es6
唯一
如图:
类型分类
- 值类型 number boolean null undefined
- 引用类型 object function
- object 对象
{}
、数组[]
、空null
、Date()
值类型
- 按值访问
- 值不可变
number值验证
var num = 1
var num1 = num // 直接赋值 num1的值等于num的值
console.log('num = ', num) // 1
console.log('num1 = ', num1) // 1
num1 = 2 // 改变num1的值 不影响num的值
console.log('num = ', num) // 1
console.log('num1 = ', num1) // 2
num = 3 // 同理 改变num的值 也不影响num1的值
console.log('num = ', num) // 3
console.log('num1 = ', num1) // 2
string值验证
var str = 'jyjin'
var str1 = str // 直接赋值
console.log('str = ', str) // 'jyjin'
console.log('str1 = ', str1) // 'jyjin'
str1 = 'tom' // 改变str1的值 不影响str的值
console.log('str = ', str) // 'jyjin'
console.log('str1 = ', str1) // 'tom'
str = 'jyjin handsome!' // 同理 改变str的值 不影响str1的值
console.log('str = ', str) // 'jyjin handsome!'
console.log('str1 = ', str1) // 'tom'
boolean值验证
var bo = true
var bo1 = bo // 直接赋值 bo1值等于bo值
console.log('bo = ', bo) // true
console.log('bo1 = ', bo1) // true
bo1 = false // 改变bo1的值 不影响bo的值
console.log('bo = ', bo) // true
console.log('bo1 = ', bo1) // false
bo = false // 改变bo的值 不影响bo1
console.log('bo = ', bo) // false
console.log('bo1 =', bo1 ) // false
bo = true // 再改变bo的值 不影响bo1
console.log('bo = ', bo) // true
console.log('bo1 = ', bo1) // false
特殊值类型验证 null
// 注意: null是'object'类型
var no = null
var no1 = no // 直接赋值 no1值等于no
console.log('no = ', no) // null
console.log('no1 = ', no1) // null
no1 = 1 // 改变no1的值 不影响no的值
console.log('no = ', no) // null
console.log('no1 = ', no1) // 1
no = 2 // 同理 改变no的值 也不影响no1
console.log('no = ', no) // 2
console.log('no1 = ', no1) // 1
特殊值类型验证 undefined
// 注意: undefined是'undefined'类型
var no = undefined
var no1 = no // 直接赋值 no1值等于no
console.log('no = ', no) // undefined
console.log('no1 = ', no1) // undefined
no1 = 1 // 改变no1的值 不影响no的值
console.log('no = ', no) // undefined
console.log('no1 = ', no1) // 1
no = 2 // 同理 改变no的值 也不影响no1
console.log('no = ', no) // 2
console.log('no1 = ', no1) // 1
特殊值类型验证 Date()
// 注意: Date()是'object'类型
var d = new Date()
var d1 = d // 直接赋值 d1值等于d 都是56秒
console.log('d = ', d) // Sat Mar 16 2019 00:18:56 GMT+0800 (中国标准时间)
console.log('d1 = ', d1) // Sat Mar 16 2019 00:18:56 GMT+0800 (中国标准时间)
// 1秒后 改变d1的值
setTimeout(()=>{
d1 = new Date() // 改变d1的值 不影响d的值
console.log('d = ', d) // Sat Mar 16 2019 00:18:56 GMT+0800 (中国标准时间)
console.log('d1 = ', d1) // Sat Mar 16 2019 00:18:57 GMT+0800 (中国标准时间)
}, 1000)
// 再2秒后 改变d的值
setTimeout(()=>{
d = new Date() // 同理 改变d的值 也不影响d1
console.log('d = ', d) // Sat Mar 16 2019 00:18:58 GMT+0800 (中国标准时间)
console.log('d1 = ', d1) // Sat Mar 16 2019 00:18:57 GMT+0800 (中国标准时间)
}, 2000)
引用类型
- 按引用访问 赋值操作的是地址,而不同地址的指向可能是同一个值对象
- 值可变 值对象改变,导致所有引用它的地址对象,值发生变化
数组array引用验证
var arr = [1, 2, 3]
var arr1 = arr // 直接复制 arr1等于arr
console.log('arr = ', arr) // [1, 2, 3]
console.log('arr1 = ', arr1) // [1, 2, 3]
arr1[0] = 2 // 改变arr1影响arr
console.log('arr = ', arr) // [2, 2, 3]
console.log('arr1 = ', arr1) // [2, 2, 3]
arr[0] = 3 // 改变arr值影响arr1
console.log('arr = ', arr) // [3, 2, 3]
console.log('arr1 = ', arr1) // [3, 2, 3]
对象类型引用验证
var obj = {
name: 'jyjin',
age: 18
}
var obj1 = obj // 直接赋值 obj1的内容和obj相同
console.log('obj = ', obj) // {name: 'jyjin', age: 18}
console.log('obj1 = ', obj1) // {name: 'jyjin', age: 18}
obj1.name = 'tom' // 改变obj1的属性值 影响obj的属性值
console.log('obj = ', obj) // {name: 'tom', age: 18}
console.log('obj1 = ', obj1) // {name: 'tom', age: 18}
obj.name = 'jack' // 改变obj的属性值 同样影响obj1的值
console.log('obj = ', obj) // {name: 'jack', age: 18}
console.log('obj1 = ', obj1) // {name: 'jack', age: 18}