1:创建对象的方式:new和对象字面量

var finn=new Object();finn.name="fiona";finn.toString()
"[object Object]"
var finn={};finn.name="fiona";finn.toString()
"[object Object]"

2:在使用对象字面量语法时,属性名也可以使用字符串

var person={name:"finn",age:30};person.name
"finn"
var person={"name":"finn","age":30};person.name
"finn"

3:在通过对象字面量定义对象时,实际上不会调用Object构造函数,Firefox2及更早版本会调用

4:对象字面量是向函数传递大量可选参数的首选方式。最好做法:对必需值使用命名参数,使用对象字面量封装多个可选参数

function person(obj)
{
if(typeof obj.name=="number")
console.log(obj.name);
};
person({name:1,age:2})
VM813:5 1

5:访问对象属性两种非法:点表示法和方括号表示法,方括号表示法优点可以通过变量访问属性.如果属性名中包含会导致语法错误的字符,或者属性名使用的关键字或保留字,也可以使用方括号表示法

var person={name:"fiona"};person["name"]
"fiona"
var person={name:"fiona"};person.name
"fiona"

6:对象字面量中,左花括号就表示的是一个表达式的开始,而不是一个语句块的开始。

为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

对于这种写法,在JS中,可以到处看到。

如: (function()) {}();  做闭包操作时等。

var person="{age:1}";var x=eval('('+person+')');x.age
1
var person="{'age':1}";var x=eval('('+person+')');x.age
1
var person="{'age':'1'}";var x=eval('('+person+')');x.age
"1"
var person="{\"age\":1}";var x=eval('('+person+')');x.age
1
var person="{\"age\":1,friend:{age:2}}";var x=eval('('+person+')');x.age
1
var person="{\"age\":1,friend:{age:2}}";var x=eval('('+person+')');x.friend.age
2

7:函数立即执行

var x=function xx() {console.log(2);}()
VM1192:2 2
undefined
function xx() {console.log(2);}()
VM1220:2 Uncaught SyntaxError: Unexpected token )
(function xx() {console.log(2);}())
VM1227:2 2
undefined
(function xx() {console.log(2);})()
VM1231:2 2
undefined

 8:()是一个分组操作符,它的内部只能包含表达式

9:Array:可以保存任何类型的数据;大小可以动态调整;创建方法new和数组字面量;可以省略new;length非只读

var colors=new Array("10",1,new Object());colors[0]
"10"
var colors=Array(2);colors[0]
undefined
var colors=Array("2");colors[0]
"2"
var colors=[];colors[0]
undefined
var colors=[];colors[1]
undefined
var colors=[];colors[2]
undefined
var colors=[];alert(colors[2])
undefined
var colors=[1,2,3];alert(colors[2])
undefined
var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);
undefined

9.1:检测数组

var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);colors instanceof Array
true

var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);colors instanceof Array;Array.isArray(colors);
true

function xx (){console.log(Array.isArray(arguments));};xx()
VM2211:2 false

function xx (){console.log(Array.isArray(arguments));console.log(arguments[0])};xx(1)
VM2212:2 false
VM2212:2 1

9.2: 转换方法:toString(),valueOf(),join

var finn=["a","b",{}];finn.toString();
"a,b,[object Object]"
{}
undefined
({})
Object {}
alert({})
undefined
finn.valueOf()
["a", "b", Object]
finn[3]=1
1
finn.toString()
"a,b,[object Object],1"
finn.valueOf()
["a", "b", Object, 1]
finn.join("|")
"a|b|[object Object]|1"