美文网首页
复杂数据类型

复杂数据类型

作者: langlangjinjin | 来源:发表于2020-08-07 15:29 被阅读0次

1、对象 Object

var obj = {
    name:"red",
    age:"18",
    sex:"男",
    sonObj:{
        name:"Tom",
        age:"3",
        sex:"女"
    }
}
// 获取对象中的属性
console.info(obj.name)   // red
console.info(obj.sonObj.age)  //3
// 添加属性
obj.work = "student"
// 修改属性
obj.age = 20
// 删除属性
delete obj.sex

对象中不存在的属性不会报错,如下:

var obj = {
    name:'aaa'
}

console.info(name)   // 报错,因为name没有被定义过
console.info(obj.age)   // undefined  对象中不错在的属性不会报错,会返回undefined

对象属性命名需要注意如下:

var obj = {
    a bc:123   // 报错 -> 键不使用引号时,需要满足变量的要求 
}
var obj2 = {
    "a bc":123    // 正确写法  -> 使用引号将属性引起来
}
obj2["a bc"]  //obj2 中的写法 不能使用 .操作符 访问属性 ,只能使用[]操作符访问

点操作符和[]操作

var obj = {
    name:"Jerry",
    age:20
}

// 添加属性的三种方法
1 obj.sex = "男"
2 obj["sex"] = "男"
3 var x = "sex"; obj[x] = "男"
注意

使用 [ 变量 ] 的形式命名属性名 (多用于 ES6 - Symbol 数据类型做属性名时使用)

// 创建变量
let a = "name"
let b = "age"

// 将定义好的变量作为属性名
let obj = {
    [a]:'tom',
    [b]:18
}

// 根据变量名获取获取对应的属性值   =>  只能使用 [] 的形式获取
console.info( obj[a] )     // tom
console.info( obj.a )     // undefined

// 普通方式获取  =>  使用[ 变量 ] 做为属性名时,普通获取方式不再能使用 [] 的形式获取
console.info( obj.name )   // tom
console.info( obj[name] )  // undefined

2、数组 Array

数组使用 [ ] 定义

var arr = [ 1,2,"a",{...} ]
console.info(arr.length)   // 4  获取数组的长度

注意:数组下标从 0 开始

跨下标定义数组的某项,会留 empty 空位站位

var arr = [1,2,3];
arr[10] = 100;   // arr[3]到arr[9] 的值为 empty (留了空位)

3、函数 function

定义函数的两种方式

// 方式1
var fn = function(){
    console.info("定义了一个函数fn")
}
// 方式2
function fn2(){
    console.info("定义了一个函数fn2")
}

// 执行一个函数
fn()

4、基本数据类型的 赋值

  • 可以理解为复制一个文本
var a = 10;
var b = a;   //将a的值拷贝一份赋值给b,此时b改变,a不会改变

5、复杂数据类型的 赋值

  • 可以理解为发送一个文本的快捷方式到桌面
var obj = { ... }   
// 初次创建一个复杂数据类型时,会创建一个{...} ,并将obj指向此对象的地址
// 此后 若obj被赋值给了 其他变量时,即将此对象的地址赋值给新的变量
// 当obj改变时,即改变了obj所指向地址的对象,所以新变量也会改变
总结:基础数据类型赋值时给值 , 引用数据类型赋值时给地址

注意:基础数据类型在非严格模式下可以添加属性,但不会被保存下来。严格模式下给基础数据类型添加属性会报错。

相关文章

网友评论

      本文标题:复杂数据类型

      本文链接:https://www.haomeiwen.com/subject/owifdktx.html