js练习笔录

1.预编译与引用类赋值 


            var foo = {n: 1};
            (function(foo){
                console.log(foo.n);//1
                foo.n = 3;
                var foo = {n: 2};
                console.log(foo.n);//2
            })(foo);
            console.log(foo.n);//3

答案解析: 

GO:foo = {n: 1}
    function = {};
函数AO:foo;
    形参和实参相统一,GO的foo和AO的foo指向同一栈空间,
    函数执行:
        foo.n = 3会改变栈空间内的值,此时GO中foo.n的值会改变
        foo = {n: 2};使AO中的foo指向了新的栈空间

 

  1. 页面产生便创建了GO全局对象(Global Object)(也就是window对象);
  2. 第一个脚本文件加载;
  3. 脚本加载完毕后,分析语法是否合法;
  4. 开始预编译 

预编译是在函数执行前一刻发生的

  1. 创建AO对象(Active Object);
  2. 查找形参和变量声明,值赋予undefined;
  3. 实参值赋给形参;
  4. 查找函数声明,值赋予函数体

2.能检测一个对象str是否是String类型的方法

3.返回0的Number类型转换

Number()
Number(0)
Number('')
Number('0')
Number(false)
Number(null)
Number([])
Number([0])

4.JS返回false的六种情况

false,    "",   0,   undefined,    null ,  NaN

5.

console.log('Value is ' + (val != '0') ? 'define' : 'undefine');

加号优先级高于 三目运算。低于括号。 所以括号中无论真假 加上前边的字符串都为 TRUE 三目运算为TRUE是 输出 define

6.

null和undefined单独和别的比较都为false,但是null和undefined比较就为true,因为undefined就是null衍生出来的一个对象

7. __proto__和prototype

__proto__和prototype,Function.prototype和Object.prototype文章参考

var F = function (){};
Object.prototype.a = function(){console.log('a');}
Function.prototype.b = function(){console.log('b')}
var f = new F();


f.a() --->a
f.b() --->Uncaught TypeError: f.b is not a function

解析:

f.__proto__ == F.prototype
true

F.prototype.__proto__  == Object.prototype
true

F.prototype.__proto__  == Function.prototype
false

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值