观看《Javascript秘密花园》小结(1)

2018-09-10  本文已影响0人  月半女那

原文地址: http://bonsaiden.github.io/JavaScript-Garden/zh/#object.general

1.hasOwnProperty函数

object.prototype.bar = 1;
var foo = {goo : undefined}
foo.bar // 1
'bar' in foo // true
foo.hasOwnProperty('bar') // false
foo.hasOwnProperty('goo') // true

2.循环

2.1 for in 循环

Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
    console.log(i); // 输出两个属性:bar 和 moo
    if(foo.hasOwnProperty(i)){
       console.log(i); // 输出 moo
    }
}

2.2for of

var student={
    name:'wujunchuan',
    age:22,
    locate:{
    country:'china',
    city:'xiamen',
    school:'XMUT'
    }
}
console.log(Object.keys(student)) // ['name','age','locate']
for(var key of Object.keys(student)){
    //使用Object.keys()方法获取对象key的数组
    console.log(key+": "+student[key]);
}
// name: wujunchuan
// age: 22
// locate: [object Object]

2.3 foreach

var a = ["a", "b", "c"];
a.forEach(function(element) {
    console.log(element);
}); // a,b,c

2.4 for

for (var i = 0; i< 4; i++){ 
   console.log(i); 
    if(i== 2){ continue } 
} // 0,1,3

for (var i = 0; i< 4; i++){
  console.log(i); 
  if(i== 2){ break } 
} // 0,1,2

2.5 map

var users = [
  {name: "张含韵", "email": "zhang@email.com"},
  {name: "江一燕",   "email": "jiang@email.com"},
  {name: "李小璐",  "email": "li@email.com"}
];
users.map(function (user) { return user .name});
["张含韵","江一燕","李小璐"]

3.闭包和引用

4.构造函数

5.作用域

由于js中没有显示的命名空间定义,这就意味着所有的对象都定义在一个全局共享的命名空间下面

function add(a, b) {
    return 
        a + b;
}
console.log(add(1, 2)); // undefined

function add(a, b) {
    return  a + b;
}
console.log(add(1, 2)); // 3
// 如果需要return的对象和reutrn不在一行就会出错

每次引用变量,js都会向上遍历整个作用域,知道找到这个变量,如果直到全局作用域这个变量还是未知的就会抛出ReferenceError异常

5.1变量提升

js会提升变量声明。意味着var和function 声明都会被提升到当前作用域的顶部

5.2 名称解析顺序

在js的所有作用域中,this指向的是当前对象,
函数作用域内也有默认的变量arguments
以访问函数内部的foo变量为例,讲解js查找顺序

6.数组

一般通过[]来创建数组

[1,2,3]  // 1,2,3
new Array(1,2,3) //1,2,3
new Array(3) // [] 长度为3

要尽量避免使用数组构造函数创建数组。推荐使用数组的字面语法,短小简洁,可读性强

上一篇 下一篇

猜你喜欢

热点阅读