发表于: 2020-03-27 17:39:27

0 1588


今天完成的事情:

明天计划的事情:

遇到的问题:

收获:

函数的属性和方法:

toString() # 

函数的toString方法返回一个字符串,内容是函数的源码。

length 属性

函数的length属性返回函数预期传入的参数个数,即函数定义之中的参数个数。

name 属性

函数的name属性返回函数的名字。

函数的变量提升

函数的作用域在其声明的位置而不是调用的位置:

函数的闭包:

原因就在于inc始终在内存中,而inc的存在依赖于createIncrementor,因此也始终在内存中,不会在调用结束后,被垃圾回收机制回收。

闭包的另一个用处,是封装对象的私有属性和私有方法。

注意,外层函数每次运行,都会生成一个新的闭包,而这个闭包又会保留外层函数的内部变量,所以内存消耗很大。因此不能滥用闭包,否则会造成网页的性能问题。


function Person(name) {

  var _age;

  function setAge(n) {

    _age = n;

  }

  function getAge() {

    return _age;

  }

  return {

    name: name,

    getAge: getAge,

    setAge: setAge

  };

}

var p1 = Person('张三');

p1.setAge(25);

p1.getAge() // 25


eval命令接受一个字符串作为参数,并将这个字符串当作语句执行。

如果参数字符串无法当作语句运行,那么就会报错。

放在eval中的字符串,应该有独自存在的意义,不能用来与eval以外的命令配合使用。举例来说,下面的代码将会报错。

如果eval的参数不是字符串,那么会原样返回。

eval没有自己的作用域,都在当前作用域内执行,因此可能会修改当前作用域的变量的值,造成安全问题。



数组的属性和方法以及细节:

数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。

除了在定义时赋值,数组也可以先定义后赋值。

任何类型的数据,都可以放入数组。(包括function和object以及Boolean)

如果数组的元素还是数组,就形成了多维数组。

数组的本质:

本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object

数组的特殊性体现在,它的键名是按次序排列的一组整数(0,1,2...)。

所以,数组的键名其实也是字符串。之所以可以用数值读取,是因为非字符串的键名会被转为字符串。

一个值总是先转成字符串,再作为键名进行赋值。


数组的方法和属性:

数组的length属性,返回数组的成员数量。

length属性是可写的。如果人为设置一个小于当前成员个数的值,该数组的成员会自动减少到length设置的值。

清空数组的一个有效方法,就是将length属性设为0。

如果人为设置length大于当前元素个数,则数组的成员数量会增加到这个值,新增的位置都是空位。

var a = ['a'];

a.length = 3;

a[1] // undefined



上面代码表示,当length属性设为大于数组个数时,读取新增的位置都会返回undefined

如果人为设置length为不合法的值,JavaScript 会报错。

使用delete命令删除一个数组成员,会形成空位,并且不会影响length属性。




对数据类型的改变:

强制转换主要指使用Number()String()Boolean()三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值。





对象有两种读取成员的方法:点结构(object.key)和方括号结构(object[key])。但是,对于数值的键名,不能使用点结构。

in 运算符

检查某个键名是否存在的运算符in,适用于对象,也适用于数组。

for...in 循环和数组的遍历

for...in循环不仅可以遍历对象,也可以遍历数组,毕竟数组只是一种特殊对象。

var a = [1, 2, 3];for (var i in a) {  console.log(a[i]); }


对象的基本特性和方法属性:

查看一个对象本身的所有属性,可以使用Object.keys方法。

var obj = {

  key1: 1,

  key2: 2

};

Object.keys(obj);

// ['key1', 'key2']



delete命令用于删除对象的属性,删除成功后返回true。

var obj = { p: 1 };

Object.keys(obj) // ["p"]

delete obj.p // true

obj.p // undefined

Object.keys(obj) // []




定时器的this一直指向window




返回列表 返回列表
评论

    分享到