javascript进阶(一)— — js暗点

1、包装对象

var a = "string";
alert(a.length);//6
a.t = 3;
alert(a.t); //undefined

javascript让”string”基本类型会转换成 String(Object)【new String(“string”);】包装类型临时对象,所以可以a.length获取长度,a.t设置之后该临时对象会销毁掉,所以获取不到a.t的值
2、{ }正确使用

{a: 1, b: 2}; //Uncaught SyntaxError: Unexpected token :

{ 花括号开头被理解成块

var obj = {a: 1, b: 2};

正确理解为对象自变量表达式

3、var a = b = 1的理解

function foo() {
    var a = b = 1;//相当于var a, (b=1);即b成了隐式全局变量
}
foo(); //调用后b全局可见
console.log(a);//Uncaught ReferenceError: a is not defined
console.log(b);//1

4、for in
缺点:

  • 顺序不确定
  • enumerable为false时不会出现
  • for in对象属性受原型链的影响

5、变量提升
变量在一个范围内声明的时候,javascript引擎会将这个声明移到范围顶部。

var v='Hello World';
(function(){
    console.log(v);
    var v='I love you';
})();//undefined

这段代码等价于

var v='Hello World';
(function(){
    var v;
    console.log(v);
    v='I love you';
})();

再来一个例子

var foo = 1;
function bar() {
    if (!foo) {
        var foo = 10;
    }
    console.log(foo);
}
bar();//输出为10,原因看下面等同代码
//等同于于一下代码
var foo;
foo = 1;
function bar(){
    var foo;//undefined
    if(!foo){ //!foo为真,执行下面foo = 10
        foo = 10; 
    }
    console.log(foo);
}
bar();

另外一个例子:

var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
console.log(a); //1
//等同于以下代码,原因分析如下, 声明式函数会提升置顶
var a;
a = 1;
function b(){
    function a(){}; //声明式函数会提升置顶
    a = 10;
    return;
}
b();
console.log(a);
//这里函数b的外部定义了a,值为1.函数b内,声明函数a的过程被提升(hoist),之后a被赋值为10;由于是函数b中新定义了a,所以对函数b外部的a并不造成影响,最后得console.log(a)输出的值还是1;

同样,匿名函数也受命名提升的影响

(function(){
    foo();
    function foo(){
        console.log("我来自 foo");
    }
})(); //我来自 foo

(function(){
    foo();
    var foo = function(){
        console.log("我来自 foo");
    }
})();//TypeError: foo is not a function
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值