写代码啦
JS对象的基本用法
回复数(0) 浏览数(23)
{{topic.upvote_count || 0}} 编辑 回复

首先介绍一下JS的其中数据类型
四基(number/String/Symbol/Boolean)两空(undefined/null)一对象(object)
对象是唯一一个复杂数据类型,下面详细介绍关于object的属性操作

声明变量的两种方式

对于变量的声明其实有三种 var let const 因为var 是ES5的内容,ES6中用let声明变量
ES5中 有全局作用域,函数作用域,没有块作用域的概念,var 可以跨块作用域起作用,因为var没有块作用域的概念,但是不能跨函数作用域起作用
ES6中,有了块级作用域的概念,let 不能跨块作用域
const是用来声明常量的,只能声明一次,且必须赋值,也只能赋值一次

关于 var let const 的详解,请参考上一篇博客

这稍作补充
let:
1. 作用于块作用域内
2. 在同一作用域内不可重复声明
3. 可赋值也可不赋值
4. 必须先声明在赋值
5. 全局声明的let属性,不会变成window的属性(let a ="abc" window.a->undefined,var a = "abc" window.a->"abc")
const 规则和let一样
只是const声明时必须赋值,且只能赋值一次

var obj ={‘name’:'frank','age':18}

删除对象的属性

删除对象的属性有两种方法
1. obj.name=undefined
2. delete obj.name
用 "name" in obj 判断name属性是否删除成功

如何查看对象的属性

obj.name ->frank
obj['name'] ->frank
此时的name都是字符串

坑:

var name = 'frank'
obj[name] = obj['frank']
上面的name是变量

如何修改或增加对象的属性

修改和增加的方法是一样的,如果原来没有该属性就是增加,有就是修改

直接修改

obj.name = ‘jack’
obj['name'] = 'jack'

批量赋值

Object.assign(obj,{address:hebei,birthday:01.01})

修改共有属性

  1. obj.--proto--.toString='yyy'
    var obj2={}
    obj2.toString ='yyy'
  2. window.Object.prototype.toString='yyy'
    推荐使用第二种方法
    #### 坑:
    不能通过obj.toString=‘xxx’直接修改属性
    这样只能修改第一层
    内存图 内存图
    这种方式只是给obj添加了一个私有属性toString
    ## 'name' in obj和obj.hasOwnProperty('name') 的区别
    'name' in obj 是用来判断obj中是否有name属性,只要有,不管是否在原型中都会返回true,hasOwnProperty,只能用来查看obj的私有属性中是否有name属性,如果name在其原型中则返回false。
{{topic.upvote_count || 0}}

首先介绍一下JS的其中数据类型
四基(number/String/Symbol/Boolean)两空(undefined/null)一对象(object)
对象是唯一一个复杂数据类型,下面详细介绍关于object的属性操作

声明变量的两种方式

对于变量的声明其实有三种 var let const 因为var 是ES5的内容,ES6中用let声明变量
ES5中 有全局作用域,函数作用域,没有块作用域的概念,var 可以跨块作用域起作用,因为var没有块作用域的概念,但是不能跨函数作用域起作用
ES6中,有了块级作用域的概念,let 不能跨块作用域
const是用来声明常量的,只能声明一次,且必须赋值,也只能赋值一次

关于 var let const 的详解,请参考上一篇博客

这稍作补充
let:
1. 作用于块作用域内
2. 在同一作用域内不可重复声明
3. 可赋值也可不赋值
4. 必须先声明在赋值
5. 全局声明的let属性,不会变成window的属性(let a ="abc" window.a->undefined,var a = "abc" window.a->"abc")
const 规则和let一样
只是const声明时必须赋值,且只能赋值一次

var obj ={‘name’:'frank','age':18}

删除对象的属性

删除对象的属性有两种方法
1. obj.name=undefined
2. delete obj.name
用 "name" in obj 判断name属性是否删除成功

如何查看对象的属性

obj.name ->frank
obj['name'] ->frank
此时的name都是字符串

坑:

var name = 'frank'
obj[name] = obj['frank']
上面的name是变量

如何修改或增加对象的属性

修改和增加的方法是一样的,如果原来没有该属性就是增加,有就是修改

直接修改

obj.name = ‘jack’
obj['name'] = 'jack'

批量赋值

Object.assign(obj,{address:hebei,birthday:01.01})

修改共有属性

  1. obj.--proto--.toString='yyy'
    var obj2={}
    obj2.toString ='yyy'
  2. window.Object.prototype.toString='yyy'
    推荐使用第二种方法
    #### 坑:
    不能通过obj.toString=‘xxx’直接修改属性
    这样只能修改第一层
    内存图 内存图
    这种方式只是给obj添加了一个私有属性toString
    ## 'name' in obj和obj.hasOwnProperty('name') 的区别
    'name' in obj 是用来判断obj中是否有name属性,只要有,不管是否在原型中都会返回true,hasOwnProperty,只能用来查看obj的私有属性中是否有name属性,如果name在其原型中则返回false。
23
回复 编辑