Javascript Garden

Posted 艳阳天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript Garden相关的知识,希望对你有一定的参考价值。

一  对象

 

1—

console.log(false.toString()); //false
console.log([1,2,3].toString()); //1,2,3

function Foo(){ }
Foo.bar=1;
console.log(Foo.bar);//1

//console.log(2..toString());//报错
console.log(2..toString());//2
console.log(2 .toString());//2
console.log((2).toString());//2
//变通方法可以让数字的字面量看起来像对象

 

 

2—

var foo={name: ‘kitten‘} 
console.log(foo.name);//kitten 
console.log(foo[‘name‘]);//kitten 
 
var get=‘name‘; 
console.log(foo[get]);//kitten 
 
//console.log(foo.1234);//报错console.log(foo[‘1234‘]);//undefined

 

3—

var obj={ 
    bar:1, 
    foo:2, 
    baz:3 
}; 
obj.bar=undefined; 
obj.foo=null; 
delete obj.baz; 
 
for(var i in obj){ 
    if(obj.hasOwnProperty(i)){ 
        console.log(i, ‘‘+obj[i]); 
    } 
} 
//输出: 
//bar undefined 
//foo null

 

4—hasOwnProperty函数

   为了判断一个对象是否包含自定义属性而不是原型链上的属性,可以使用继承自Objeect.prototype的hasOwnProperty方法。其是javascript中唯一一个处理属性但是不查找原型链的函数。

 

5—for in 循环

   在查找对象属性时遍历原型链上的所有属性。

Object.prototype.bar=1; 
var foo= {moo:2}; 
for(var i in foo){ 
    console.log(i); //moo bar 
}
 
for(var i in foo) { if (foo.hasOwnProperty(i)) { console.log(i);//moo } }

 

二  函数
1— this
Foo.method = function() { 
    function test() { 
        // this 将会被设置为全局对象(译者注:浏览器环境中也就是 window 对象) 
    } 
    test(); 
} 
 
Foo.method = function() { var that = this; //为了在 test 中获取对 Foo 对象的引用,我们需要在 method 函数内部创建一个局部变量指向 Foo 对象。 function test() { // 使用 that 来指向 Foo 对象 } test(); }

 

2--循环中的闭包
for(var i = 0; i < 10; i++) { 
    setTimeout(function() { 
        console.log(i);//输出10 十次 
    }, 1000); 
} 
//ps:当 console.log 被调用的时候,匿名函数保持对外部变量 i 的引用,此时 for循环已经结束, i 的值被修改成了 10. 
 
 
 
for(var i = 0; i < 10; i++) { 
    (function(e) { 
        setTimeout(function() { 
            console.log(e); 
        }, 1000);//输出0到9 
    })(i); 
} 
//ps:自执行匿名函数。外部的匿名函数会立即执行,并把 i 作为它的参数,此时函数内 e 变量就拥有了 i 的一个拷贝。 
// 当传递给 setTimeout 的匿名函数执行时,它就拥有了对 e 的引用,而这个值是不会被循环改变的。


for(var i = 0; i < 10; i++) { setTimeout((function(e) { //从匿名函数返回一个函数 return function() { console.log(e); } })(i), 1000) }

 

4— arguments对象

函数中的参数列表,实际上是一个对象。

转换为数组方法:

  Array.prototype.slice.call(arguments); (性能欠佳)

//(1)下面是将参数从一个函数传递到另一个函数的推荐做法。function foo() { bar.apply(null, arguments); } function bar(a, b, c) { // 干活
}


//(2)另一个技巧是同时使用 call 和 apply,创建一个快速的解绑定包装器。function Foo() {} Foo.prototype.method = function(a, b, c) { console.log(this, a, b, c); }; // 创建一个解绑定的 "method" // 输入参数为: this, arg1, arg2...argN Foo.method = function() { // 结果: Foo.prototype.method.call(this, arg1, arg2... argN) Function.call.apply(Foo.prototype.method, arguments); }; / Foo.method = function() { var args = Array.prototype.slice.call(arguments); Foo.prototype.method.apply(args[0], args.slice(1)); };

 

 

 

 

 

 未完待续:

参考 & 学习 & 感谢 http://bonsaiden.github.io/JavaScript-Garden/zh/#function.constructors

 

以上是关于Javascript Garden的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

30秒就能看懂的JavaScript 代码片段

Educational Codeforces Round 36 A Garden

常用Javascript代码片段集锦

48个值得掌握的JavaScript代码片段(上)