Skip to content

{}的用法及对象字面量里的this

LYF edited this page Oct 10, 2016 · 2 revisions

{} 如果不是作为赋值语句的话,就表示一个代码块

 
 // 这是一个代码块
 {

    var a = 2;
    alert(a); // 2
    alert(this); // window

 }
 alert(a); // 2;

 // 这是一个代码块

 "use strict";
 
 {

   let b = 2;

   alert(b); // 2
   
   alert(this); // window  

 }

alert(b); // Uncaught ReferenceError: b is not defined

{} 如果作为赋值语句的话,就表示一个对象字面量

 
 // 这是一个对象

 var object = {
     
     // var a = 2; alert(2);
   
     age:26  
 
 }

如果 {} 作为一个对象字面量的话,内部的语句只能是 key:value, 不能出现其他符号,否则报错 Uncaught SyntaxError: Unexpected token x。这就是使用eval来解析json字符串时,需要加上()的原因,不加的话,会把{}当作代码块,而代码块中不能出现 key:value, 这种代码

如果想要作为一个对象且可以在内部使用所有语句,可以参考 function应用技巧中的 new function(){} 的使用

对象字面量中的this

var age = 999;
var object = {
    age:26,
    sayAge:this.age
}
alert(object.age) // 26
alert(object.sayAge); // 999

第二种:

/*
 
 会报错,报错的原因在于:当在{}中的非方法中使用 object.age 时,此时object还不存在

*/

var age = 999;
var object = {
    age:26,
    sayAge:object.age // Uncaught TypeError: Cannot read property 'age' of undefined
}
alert(object.age) 
alert(object.sayAge); 
Clone this wiki locally