javascript引用類型

1:建立對象的方式:new和對象字面量express

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

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 1token

5:訪問對象屬性兩種非法:點表示法和方括號表示法,方括號表示法優勢能夠經過變量訪問屬性.若是屬性名中包含會致使語法錯誤的字符,或者屬性名使用的關鍵字或保留字,也可使用方括號表示法ip

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

6:對象字面量中,左花括號就表示的是一個表達式的開始,而不是一個語句塊的開始。io

爲何要 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({})undefinedfinn.valueOf()["a", "b", Object]finn[3]=11finn.toString()"a,b,[object Object],1"finn.valueOf()["a", "b", Object, 1]finn.join("|")"a|b|[object Object]|1"

相關文章
相關標籤/搜索