/**
* 为什么需要引用类型
* 有一些数据并不像基本类型一样单纯,它可能是有多个基本数据类型的集合
* 比如我们要表示一款游戏的介绍信息,只有基本数据类型的话
*/
let name = 'LOL' //名字
let author = 'Riot' //作者
let price = 0 //价格
//没啥问题,但是如果有很多游戏岂不是得name1 name2 name3...
//至少看着不舒服,而且跨文件和作用域的时候不好统一获取他们
//所以我们用一个基本数据类型的集合来表示一款游戏
let game1 = {
name: 'LOL',
author: 'Riot',
price: 0
}
let game2 = {
name: '饥荒',
author: '忘了',
price: 20
}
//这样看着舒服多了,访问他们的详情
console.log(game1.name) //打印game1的名字!
/**
* 上面这种花括号定义的数据类型是用键值对呈现的(key: value)
* 行话常说的哈希表(hashtable),哈希map(hashamap),map,字典,映射在js里面都是这玩意儿
* 通过键(key)访问值(value),就像通过变量访问值一样一样的,只是这些值统一放在一个变量里面
*/
/**
* how to use it!
*/
//所有数据就俩功能,读和写
//读就是获取值的过程,很简单,而写则包括了增加 删除 修改三种方式。
//所有的程序本质功能都是这俩玩意儿,即便是各种文件也是一个提供增删改查的数据
//读取元素
game1.name //读取了game1的name值
//or
game1["name"]
//修改元素
game1.price = 78 //这下game1成收费游戏了
//or
game1["price"] = 78
//添加元素
//现在给game1添加一个新元素time表示发布时间
//map就是这样,没有的key机会添加上去,有就是修改和修改一毛一样
game1.time = 2010
//or
game1["time"] = 2010
//删除元素
delete game1.time //一般没人这样干
game1.time = null //一般这样干,赋值为null就行了,虽然还存在这个key但值为null,二者区别具体后面讲
//数组
/**
* 数组就是一系列数据的组合,和上面的map一样,正经数组的元素类型都是一样的。
*/
//声明一个number类型的数组 它很正经,它所有元素(1 2 3)都是number
let nums = [1, 2, 3] //nums数组包含了三个元素,它的长度为3
//读取数组元素
//你可以这样访问数组元素
nums[0] //1 数组第一个元素 程序员计数都是从0开始的
nums[1] //2
nums[2] //3
nums[3] //出错,没有第四个元素
//增加元素
//nums[3] = 4 一般不这么干,即便你nums[10000] = 4也没事,但是你这个数组的长度已经是10001了!中间有很多浪费的空间!
//or
nums.push(4) //在数组末尾增加一个元素4
nums.unshift(4) //在数组最前面增加一个元素4
//现在打印数组康康
console.log(nums) //[4, 1, 2, 3, 4]
//修改和map一样,直接修改
nums[0] = 0 //第一位变为0了!打印一下看看是不是[0, 1, 2, 3, 4]
console.log(nums)
//删除元素
nums.pop() //从数组末尾删除一个元素
nums.shift() //从数组开头删除一个元素
//?那中间呢!
nums.splice(1, 1) //表示从第二号元素开始删除1个元素 [1, 2, 3] -> [1, 3] nums[1]为2,从2开始删1个,所以2被删了只剩[1, 3]
console.log(nums)
/**
* 总结
* 常用的两种引用类型 map(也称为对象object,但是object范围很广,数组也是object,所以先记为map) 和数组array
*/
//map声明
const map1 = {
name: "nico"
}
//map增加元素
map1.score = 100
//map修改元素
map1.score = 99
//数组声明
const arr1 = [1, 2, 3]
//数组增加元素
arr1.push(4)
arr1.unshift(0)
//数组删除元素
arr1.pop()
arr1.shift()
arr1.splice(1, 1)
//数组修改元素
arr1[0] = 100
console