2019年7月24日

JavaScript-Object相关基础属性方法(转)

作者 admin

Object

我们常说的对象,字典,键值对。数据储存下来是没有前后顺序的,或许你会在相同的运行环境下,每次打印都是一样的顺序,但是事实上它就是 无序 的,切记。

创建与获取如下:

var obj = {
    a: 1,
    b: 2
}

obj.a // 1
obj[b] // 2

以上两种获取方式请注意,第一种是绝对常用模式,几乎没什么人会愿意多打[]的,但是[]的存在价值是有的,比如obj.x其中x如果是合法字符串还好,如果x是abc-xyz这种类型,则使用.就会非法,而此时使用obj['abc-xyz']即可,注意里面是字符串。

Object没有什么特殊的常用方法(或属性),因为你要什么,自己补充什么,如下:

var obj = {
    num1: 1,
    func1: function() {
        return '我是函数'
    },
}

obj.num1 // 1
obj.func1() // “我是函数”

看看下面这个,有没有什么感觉?

var array= {
    length: 1,
    indexOf: function(item) {
        return 2
    }
}

array.length // 1
array.indexOf('x') // 2

是不是很像数组的操作?

不要误解数组是上面这个对象啊,我只是想说,你要啥,自己补充啥,自己创建一个数组结构都可以。

对象的键值对里面的值,就是key-value的value也可以是Object,所以Object可以非常非常复杂(数组也是)。

数组与对象是可以互相套用的,虽然理论上可以无限套用下去,但请在实际使用中避免过多混合套用。

delete

一个比较重要的操作符,或者说是常用处理Object的一个方式:

delete obj.x 删除对象obj的x键值对,返回值是个布尔值,说明有没有删除成功。

delete写法有两种,delete obj.xdelete(obj.x),这里要注意,形如delete或typeof这种,不是函数,他们是跟(++自增、–自减)一样的一元操作符,使用括号不是函数调用的意思。

严格来说delete可以操作所有引用,因此可以操作Object属性的引用。

delete示例:

var arr = [1, 2, 3]
var obj = {
    a: 1,
    b: 2
}

delete arr[1] // true
arr // [1, empty, 3],会删除索引为1元素的内容,但是不删除位置
delete obj.a // true
obj // {b: 2},a的键值对拿走了,干干净净

delete arr // true
arr // arr is not defined

delete obj
obj // obj is not defined

delete arr // true,此时的arr已经没有了,相当于delete个空,允许。
delete obj // 一样

由上方示例可以看出,delete在数组上使用时比较坑的,所以常见一点还是在Object上面使用。

别问{} + 1是多少,首先确实是当做0处理,但是实际中完全没有意义,因为数组里面假如是纯字符数组或纯数字数组,使用加减可以考虑省事,但是对象加减,当单纯是{}时候代表的不是Object,是代码块!当你使用new Object()填充数据时候,加减第一没有意义,第二任何情况结果都是(拿+1做示例)"[object Object]1"{a: 1, b: 2} + 1是会报错,语法不正确。
作者:前端绅士
链接:https://www.imooc.com/article/49594