JavaScript对象和json以及简单的数组操作

247 阅读2分钟

简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成。

//举例子说明
var obj = {
  p: 'Hello World'
};
var o = {}//也可以生成一个对象

基本的使用

var company = {
    name: 'liangsicheng',
    age: 22,
    sayHello: function(){
        console.log('hello world')
    }
}
console.log(company.name)
console.log(company['name'])
company.sayHello()

company.addr = '多伦多'
compay['business'] = '前端开发'

for(var key in company){
    console.log(key)
    console.log(company[key])
}

关于key的name

对象的所有键名都是字符串,所以加不加引号都可以。上面的代码也可以写成下面这样。

如果键名是数值,会被自动转为字符串。

ar o ={
  1: 'a',
  3.2: 'b',
  1e2: true,
  1e-2: true,
  .234: true,
  0xFF: true
};

o
// Object {
//   1: "a",
//   3.2: "b",
//   100: true,
//   0.01: true,
//   0.234: true,
//   255: true
// }

如果对象里有一个函数怎么调用?


var o = {
    p: function(x){
        return 2 * X;
    }
    
}
o.p(2)

查看所有属性

var o = {
  key1: 1,
  key2: 2
};

Object.keys(o);
// ['key1', 'key2']
//也可以foreach来遍历

JSON

JSON 格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式,2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。

这玩意是用来替代XML用的 XML基本就是SPRING框架配置用的

以下是合格的 JSON 值。

["one", "two", "three"]

{ "one": 1, "two": 2, "three": 3 }

{"names": ["张三", "李四"] }

[ { "name": "张三"}, {"name": "李四"} ]
//必须是双引号

JSON.parse()

这个方法可以将一个合格的JSON字符串转换为一个JS对象

JSON.parse('{}') // {}
JSON.parse('true') // true
JSON.parse('"foo"') // "foo"
JSON.parse('[1, 5, "false"]') // [1, 5, "false"]
JSON.parse('null') // null

var o = JSON.parse('{"name": "张三"}');
o.name // 张三

JSON.stringify()

JSON.stringify方法用于将一个值转为字符串。该字符串符合 JSON 格式,并且可以被JSON.parse方法还原。

SON.stringify('abc') // ""abc""
JSON.stringify(1) // "1"
JSON.stringify(false) // "false"
JSON.stringify([]) // "[]"
JSON.stringify({}) // "{}"

JSON.stringify([1, "false", false])
// '[1,"false",false]'

JSON.stringify({ name: "张三" })
// '{"name":"张三"}'

数组

基本使用

var arr = [3, 4, 5, 6]
console.log(arr.length)  //4
console.log(arr[0])      //3
console.log(arr[3])      //6
console.log(arr[4])      //undefined
arr[4] = 'hello'
console.log(arr[4])      // 'hello'

arr.push('LSC')      //再数组最后添加一个元素
console.log(arr)         // [3, 4, 5, 6, 'hello', 'LSC']
var value = arr.pop()    //把数组最后一位弹出来,返回 
console.log(value)       //'LSC'
console.log(arr)         //[3, 4, 5, 6, 'hello']

arr.unshift('LSC')     //在数组第一位新增
console.log(arr)         //['LSC', 3, 4, 5, 6, 'hello']
var value2 = arr.shift() //把数组第一位拿出来返回,数组发生变化
console.log(value2)      // 'LSC'
console.log(arr)         //[3, 4, 5, 6, 'hello']

var arr2 = arr.splice(1, 2)         //从下标为1的元素开始,拿出来2个元素作为一个数组返回,原数组发生改变
console.log(arr)         // [3, 6, 'hello']
console.log(arr2)        //  [4, 5]

arr.splice(1, 0, 8,9)    //从下标为1的位置(元素6)开始,删除0个,新增两个元素(在6前面新增8,9)
console.log(arr)         //[3, 8, 9, 6, 'hello']

var arr3 = arr.slice(2,3)           //从 arr 下标为2开始,到下标为3结束(不包括3),做为新数组,原数组不变
console.log(arr3)       // [9]
console.log(arr)        //[3, 8, 9, 6, 'hello']

var str = arr.join('-')
console.log(str)        // "3-8-9-6-hello"

var arr4 = [3, 5, -1, 18, 9, 27]
arr4.reverse()          //倒序,本身发生变化
arr4.sort(function(v1, v2){   //排序,本身发生变化
    return v1-v2; //v2-v1
})

可以通过设置数组的length来砍数组