对象
对象是JS中的一种数据格式
对象在Js中的数据类型数据 一般被称为 引用数据类型(也有喜欢叫复杂数据类)
1.如何向变量中存储一个叫对象的数据呢?
(1).语法1: var obj = {键值对}
键值对 -> key : value
例如:var obj = {
a : 100, (逗号间隔 )
b: 200,
c: 300
}
什么是键值对(以上面为例)
在obj对象中, a 为 key , 100为对应的value
另一种说法: a 为键, 100 为对应的 值
另一种说法: a 为属性名, 100 为对应的 属性值
创建对象
分为两种方式:
1.字面量的方式:(语法1)(使用较多)
var obj = {键值对}
2.内置的构造函数的创建
var obj = new Object()
创建一个具有属性或者说具有键值对的 对象
对象关于key的要求或者说对于属性名的要求或者说对于键值对的键的要求
1.推荐使用符合变量命名规则与规范的名字
2.对象的key 也可以使用纯数字来当作键名(属性名/key)
3.可以使用任何特殊符号,但是需要引号包括
一般只推荐第一种!!!
对象的操作 (增删改查)
分为两种方式
一般来说,大部分场景使用点语法更简单,有一些特殊场景只能使用中括号语法
点语法会将后边的字符当成字符串来使用,而不是当成变量,如果相当变量来使用。那么应该使用中括号语法
1. 点语法
A.查询:获取到对象内部某一个属性对应的属性值
例如 console.log(obj.a) //获取obj对象中的a
B.新增:向对象内部新增一个属性
例如 obj.d = 100
console.log('最新的对象',obj) //将d = 100 添加到obj对象中
C.删除:删除对象中的某一个属性
例如 delete obj.a
console.log('删除后的对象',obj) //将a从obj对象中删除
D.修改:修改对象内部某一个属性对应的属性值
例如 obj.a = 'ture'
console.log('修改后的对象',obj) //将a改为ture添加到obj对象中
2. 中活号语法(数组语湖)
A.查询:
例如 console.log(obj['a']) //获取obj对象中的a
B.新增:
例如 obj['d'] = 100
console.log('最新的对象',obj) //将d = 100 添加到obj对象中
C.删除:
例如 delete obj['a']
console.log('删除后的对象',obj) //将a从obj对象中删除
D.修改:
例如 obj['a'] = 'ture'
console.log('修改后的对象',obj) //将a改为ture添加到obj对象中
***特殊情况下我们需要使用中括号语法
1.对象的属性名,有纯数字或者特殊符号,这个时候只能使用中括号语法
例如:
var obj = {
100: '我的属性名是纯数字100',
'!':'我的属性名是特殊符号!',
'@':'我的属性名是特殊符号@'
}
2.如果涉及变量相关的时候,也需要使用中括号
例如:
for...in 循环遍历对象
for in : 一个循环语句
对象 : 一种数据格式
遍历 : 一般我们会说‘遍历对象’/‘遍历数组’
遍历对象 : 想办法拿到对象内部所有的属性名,与属性值
语法:
for(var i in 要遍历的对象){
循环要执行的代码
例如 -> console.log(obj[i])
}
数组
数组是一种数据类型,他也是属于引用数据类型(复杂数据类型) 根据字面意思来说,存放数字的一个组合,更完善的说法,数组是存放一些数据的集合. 注意:数组内的数据是有顺序的
创建数组
分为两种方式:
1.字面量方式:
语法:
var arr = [1,2,3,]
2.内置构造函数的方式
语法1 :
var arr = new Array() //创建一个空数组
语法2 :
var arr = new Array(5) //创建一个有长度的数组
语法3 :
var arr = new Array(1,2,3) //创建一个有内容的数组
数组的Length属性
Length 翻译过来就是 长度 的意思
代表这个数组内,有多少个成员
语法:
数组名.length
例如 -> console.log(arr.length) //打印出arr数组有几个成员
数组的 索引
索引 也有人叫做 下标
就是指一个数据,在这个数组内排列在第几个位置上
注意: 在JS中,索引(下标) 是从 0 开始计算的
如果想要获取数组指定位置的值,可以通过索引
语法:
数组名[下标] -> 能够获取到这个数组中对应下标的成员具体的值
遍历数组
想办法拿到数组的每一个成员
//需求,就是根据arr 这个数组,拿到他的所有下标
for (var i = 0; i < arr.length; i++) {
console.log(i) // 输出下标 0 1 2 3 4 5
//需求:拿到数组所有的值,输出在控制台
console.log( arr[i])
}
数组基本操作案例
面试手写题,大概率需要
冒泡排序
属于数组排序的算法之一
算法就是解决一个问题最简单最高效的方法
冒泡排序的核心:
对比数组的前一项和后一项,如果前一项比较大,那么就往后挪
(这个排序之后是按照从小到大排序)
选择排序
var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
console.log('初始数组: ', arr)
for (var k = 0; k < arr.length; k++) {
var minIndex = k
for (var i = k + 1; i < arr.length; i++) {
if (arr[minIndex] > arr[i]) {
minIndex = i
}
}
var temp = arr[k]
arr[k] = arr[minIndex]
arr[minIndex] = temp
}
console.log('选择排序后后的数组:', arr)
数据类型之间的区别
数据类型分为两种:
1.基本数据类型(简单数据类型)
2.引用数据类型(复杂数据类型)
基本数据类型内部存储的是值;引用数据类型内部存储的是地址
1.存储
变量的数据存储的地方是 内存中
内存分为两个:
栈内存: 基本数据类型,
如: string number undefined null booLean
数组/对象/函数 名
堆内存: 复杂数据类型,将数据本体存放在堆内存中,比如对象或者函数,
然后将指向该内存的地址,存放在数组名或者对象名或者函数名中
数组/对象/函数 名 存放在 栈内存 中
面试官:数据类型之间有什么区别?
基本数据类型有哪些,然后他们存储的地方是栈内存中
引用数据类型有哪些,
然后他们数据本体存放的地方是堆内存中。
然后变量名存储的位置是栈内存中
2.赋值
基本数据类型:赋值以后,两个变量之间没有任何关系,相当
于将我自己的某一个东西,复制一份给你,
然后你的就是你的,我的还是我的
引用数排类型:赋值以后,因为变量内部存储的是指向堆内存的地址,
所以在赋值的时候,其实是将这个地址给到了另外一个变量,
那么相当于这两个变量存储的是同一个钥匙,
所以操作其中一个变量的时候,会影响另外一个变量
3.比较
基本数据类型:就是值的比较
引用数据类型:比较的时候比较的是存储地址
引用数据类型在对比的时候,对比的是地址
若这两个对象的地址完全不同,所以返回的结果就是false
若这两个对象的地址完全相同,所以返回的结果是true
4.传参
基本数据类型:将值拷贝一份传递给形参,在函数内修改不会影响外界
引用数据类型:将存储地址赋值给形参,在函数内修改会影响外界