JavaScript-Object相关基础属性方法(转)
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.x
和delete(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