[转] Javascript初学者需要知道的十件事

1. Javascript没有类的概念。一般使用原型链继承(prototypal inheritance)来模拟类。

2. 除了null和undefined之外的任何数据类型都能表现成Object (behave like an object),包括Number类型和Function类型。


var  n  =   42 ;
function  f() { alert( " foo " ); };

alert(
" n is  "   +  n.toString());  //  "n is 42"
alert(f.name  +   "  is a function " );  //  "f is a function"


注意,是“表现为object”,而不是“是object”。事实上,number, string和boolean是基本类型(primitives),除了这三个之外的都可以算作object,比如一个正则表达式也是一个object。 当需要访问基本类型变量的属性时,那些基本类型变量将被临时转换成object。 例如:

" foobar " .big();
//  is equivalent to
new  String( " foobar " ).big();
.
14 .toFixed();
//  is equivalent to
new  Number( 3.14 ).toFixed()

另外,不能强行给基本类型变量(number, string, boolean)加上私有属性。

var  a  =   " mystring " ,
    b 
=   new  String(  " mystring "  );

Object.defineProperty( b, 'foo', { value: 
42 , enumerable:  false  });
console.log(b.foo); 
//  42
Object.defineProperty( a, 'foo', { value:  42 , enumerable:  false  });
//  TypeError: Object.defineProperty called on non-object

//  trying another way:
a.foo  =   42 ;
//  remember, this is equivalent to:
//
 new Number(a).foo = 42;
//
 …so the 'foo' property is defined on the wrapper, not on 'a'
console.log(a.foo);  //  undefined

3. 如果变量名前不加上var,那么这个变量就是全局的。

function  setGlobal() {
  a 
=   42 ;
}

function  setLocal() {
  
var  b  =   23 ;
}

setGlobal();
alert(a); 
//  42

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

4. this指针是由调用函数赋予的, 而不是由被调函数自身定义的。 例如:


var  a  =  {}, b  =  {};

a.foo 
=   42 ;
b.foo 
=   18 ;
a.alertFoo 
=   function () { alert( this .foo); };

a.alertFoo(); 
//  42
a.alertFoo.call(b);  //  18

5. 严格的相等判断应该使用===。例如 :

0   ==   false  为真, 但是  0   ===   false  为假。

6. 0, undefined, null, "", NaN 都是假值 (falsy)。
这些值全都等同于false,但他们之间不能相互替换。

7. 变量声明会被提升到当前作用域的顶端。 例如:下述代码中,你认为调用foo函数会返回什么?

var  a  =   2 ;

function  foo() {
    
return  a;
    
var  a  =   5 ;
}


它将返回undefined。 上述代码等同于下述代码:

var  a  =   2 ;

function  foo() {
    
var  a;  //  'a' declaration is moved to top
     return  a;
    a 
=   5 ;
}
另一个例子: 下述代码中,调用函数foo后变量a的值是什么?
var  a  =   42 ;

function  foo() {
    a 
=   12 ;
    
return  a;
    
function  a(){}
}

答案是42。因为foo函数中变相声明了a变量,因此a成了局部变量了。

function  foo() {
    
function  a() {}  //  local 'a' is a function
    a  =   12 //  local 'a' is now a number (12)
     return  a;  //  return the local 'a' (12)
}

8. 参数在函数声明中可以省略, 例如:

function  hello(name, age) {
  alert(
" Hello  " + name + " , you’re  " + age + "  years old! " );
}

hello(
" Anon " 42 );  //  "hello Anon, you’re 42 years old!"
hello( " Baptiste " );  //  "hello Baptiste, you’re undefined years old!"
hello( " Bulat " 24 42 );  //  "hello Bulat, you’re 24 years old!"

9. 对于字符串,使用双引号""和单引号''的效果是一样的。

10. Javascript代码可以在浏览器环境之外运行, 比如在Terminal或者HTTP服务器上。(例如 Node.js)


原文出自:

http://www.cnblogs.com/newyorker/archive/2013/01/18/2865820.html



你可能感兴趣的:([转] Javascript初学者需要知道的十件事)