什么是对象
- js的一种数据类型
写法
- {}
- new Object
- Object.create({})
格式
- {键:值}多个 键值用逗号分隔 键表示属性名 值表示属性值
- 值:必须储存数据 可以是任意数据类型 和数组类似 变量会被解析
- 键:键可以加引号,可以不加引号 可以写字符和数值类型 其他类型不能书写
- 如果键名和变量名一致 那么可以直接写变量进去 变量名表示键的值
var name ="lisi"; var obj = {name}
变量值表示
<script>
var a = {
name:"lisi",
leg:2,
wings:2,
sing:function () {
alert(1);
}
}
console.log(a);
</script>
var a = "name";
var obj = {
a:"lisi",//a不会被解析为李四 因为会被认为是字符串
leg:2,
wings:2,
sing:function () {
alert(1);
}
}
var a = "name";
var obj = {
a:a,//右侧a会被解析为李四
leg:2,
wings:2,
sing:function () {
alert(1);
}
}
查找属性的值
- 对象取值 obj["字符串"]可以代替obj.字符串 使用中括号语法或者点语法 类数组是对象 有length属性和数值的键
<script>
var stu={
name:"lisi",
age:19,
height:180,
}
console.log(stu.name);
console.log(stu["name"]);
</script>
<script>
var stu={
name:"lisi",
age:19,
height:180,
1:"haha",
}
console.log(stu.name);
console.log(stu["name"]);
console.log(stu["1"]);//当键是数值时,只能用[]取值 变量定义规则是不能数字开头
</script>
类数组和数组一样都有length属性 但是类数组是个对象 并不是数组 数组自带length属性 类数组可以通过对象中的键值对达到数组的效果 数组没有键值对关系 里面存的是值
var stu={
0:"lisi",
1:"name",
2:20,
length:3,
}
console.log(stu);
当键是数值 取值是 console.log(stu[0])
这也是为什么类数组可以for循环[]取值
- 修改属性的值 通过点语法直接赋值修改
<script>
var stu={
name:"lisi",
}
stu.name ="wangwu";
console.log(stu.name);
</script>
- 添加值 通过点语法直接赋值添加
<script>
var stu={
name:"lisi",
}
stu.name ="wangwu";
stu.height=180;
console.log(stu);
</script>
- 删除属性 delete obj.x
var stu={
name:"lisi",
weight:20,
}
delete stu.weight;
console.log(stu);
- 判断对象中是否存在某个属性 "xx" in obj 存在为true
var stu={
name:"lisi",
weight:20,
}
stu.xx="";
if ("xx" in stu){//根据键判断 跟值没关系
alert("存在");
}else{
alert("不存在");
}
结果是存在
对比数组的取值 赋值 删值
- 数组取值 arr[索引]
- 数组的赋值 arr[索引] = “新值”
- 删除数组的元素
delete arr[索引]
遍历对象
<script>
var oArr ={
0:"你好",
1:"我好",
2:"她好",
length:"3",
}
for (var i=0;i<oArr.length;i++){
console.log(oArr[i]);
}
</script>
但是
<script>
var oArr ={
name:"你好",
age:"我好",
height:"她好",
length:"3",
}
for (var i=0;i<oArr.length;i++){
console.log(oArr[i]);
}
</script>
这样是取不出来的 需要新的属性
for in 循环 性能很低
<script>
var oArr ={
name:"你好",
age:"我好",
height:"她好",
length:"3",
}
for (var key in oArr){//通过key取键
console.log(oArr[key]);//key是变量 并不是oArr的属性 不能写oArr.kry
}
</script>
- for in的缺点 性能低 因为她还读了原型
jason
- 全称 javascript object notation js对象标记 本质是字符串
<script>
var json = `{
"name":"lisi",
"age":19,
}`
</script>
键必须要用双引号包裹 值的类型可以是数组 对象 bool 字符串 数值
作用 :如果设计数据交换 不同语言之间怎么交换数据? 不同语言的对象可能不同 但是字符串可以沟通 +json这个字符串 是特殊格式的字符串 可以表示数据的键和值的关系 然后不同的语言再转化 自己能读懂的数据即可
json包括 对象 数组 字符串 数值 true false null
<script>
var json =`{"name":"lisi",}`;
var json2 = `["lisi","wangwu"]`;
var json3 = "123";
var json4 = "年后";
</script>
- 把js的数据转换成json
JSON.stringify()
序列化 :遇到函数json自动舍去 对象 数组 字符串 数值 true false null
<script>
var oArr ={
name:"你好",
age:"我好",
height:"她好",
length:"3",
}
console.log(JSON.stringify(oArr));
</script>
5.将json转化成对象 反序列化 JSON.parse(json)
<script>
var json =`{"name":"lisi"}`
console.log(JSON.parse(json));
</script>
json2的兼容
JSON.parse()/stringify()
不兼容 ie7及以下- 解决方法 :使用 json2.js
- 网上找json2.js源码 并下载
- 只需要json2.js 在代码中引入script