第三章
3.6
switch语句
1.与else if 相似,符合即跳出;
2.if if if全判断
3.7
1.return代表结束,return后的语句不执行
2.arguments[0]代表空函数sayHi( )第一个参数的值,又sayHi(12){alert(arguments.length)} //1
3.arguements永远与对应的值同步,例如sayHi(1,2)那么arguements[0]=1
4.严格模式下,arguements 无效
5.JavaScript不存在函数签名所以,没有重载
6.基本类型包括:undefined/null/string/Boolean/number(栈内存)占据空间
引用类型:object(堆内存)指针
第四章、变量,作用域和内存问题
4.1
1.不能给基本类型增加属性
var name="baby";
name.age=27;
alert(name.age); //undefined
可以给引用类型增加属性
var name=new Object( );
name.age=27;
alert(name.age); //27
2.复制
基本类型复制:实质是创造一个副本。
引用类型复制:实质是创造一个副本指针,指向某个对象。
3.所有函数的参数是按值传递的,而不是按引用传递。
因为访问变量有按值和按引用两种方式,而参数只能按值传递。
4.数据类型检测:基本类型用 typeof,引用类型用 instanceof
5.作用链的作用:保证对执行还境有权访问的所有变量和函数的有序访。
全局执行环境的变量对象始终是作用域链的最后一个对象。
4.2
1.JavaScript没有块级作用域。
2.作用域分界线:function();
开辟作用域:with / try / catch;
3.ES6新增块级作用域:let,concat
var存在变量提升,而let没有。
4.执行环境:某个执行环境执行完,就被销毁,包括其中的变量和函数,而全局执行环境知道应用退出或者浏览器关闭时销毁。
4.3
1.垃圾回收方式:标记清除 和 引用计数
第五章
5.1object类型
1.object类型有两种:new object()构造函数 和 var name = { json }
5.2 array类型
1.object类型有两种:同上
2.数组从0开始,index也是从0开始
3.length能用于限制长度,从而使得之后的值undefined
4.所有对象都具有:totoLacalString( ),toString( )和value( )方法。
5栈方法 push( ) , pop( ),后进先出,如阶乘递归,从后插入
6.队列方法 shift() unshift(),先进先出,从前插入
7.重排序方法 reserse() sort()如果是英文,则比较首字母的顺序
function compare(a,b){
return b-a;
}
8.操作方法 concat()slice()splice()
.concat("",[ ])先复制数组,然后把新的内容插入到副本最后,不影响原数组;
.slice( 起始位置,[ 结束位置,不包含自身 ] )返回的是原数组某个范围的项,不影响原数组;
.splice()方法始终返回一个数组,即移除项或者替换项,
删除 .splice(起始位置,要删除的项数)
插入 .splice(起始位置,要删除的项数 ,插入的内容)
替换 .splice(位置,要删除的项数 ,插入的内容)
9.位置方法 indexOf(查找项,起始位置) lastIndexOf(查找项,起始位置 )
查找项要求严格相等,返回索引值。
0开始,不存在返回-1;
10.迭代方法 : every(function,[ 作用域对象 ])some() foreach()map() filter()
每个方法接受两个参数。
function( 数组项的值,index,数组本身)
every()要求数组所有项满足函数条件,返回Boolean
some()要求部分项满足函数条件,返回Boolean
filter()返回满足条件项的值,用于查询某些项是否存在
foreach()只是对数组每项传入一个函数方法并执行,没返回值,类似for循环
和foreach()不同的是map()执行函数并返回数组。
11.归并方法 reduce(function,[ value ])reduceRight()
var num=[1,2,3,4,5];
var sum=reduce ( function ( prev , cur , index , array ){
return prev+cur;
});
alert(sum); //15
5.5 function类型
1、定义函数的方法:①function name(){} ,
②var name=function(){}; ,
③var name=new Function(){}
函数是对象,函数名是指针。
function A(function B,传给前面function的参数)
2、函数内部属性包含两个特殊对象:arguements 和 this
arguments:
function A(a){
arguments.callee(a-1);
}
arguments.callee指向的是function A
经典的递归
function plus(num){
if(num=1){
return 1;
}else{
return num*plus(num-1);
}
}
this: P115
caller:
function outer(){
inner();
}
function inner(){
alert(inner.caller);
}
outer(); // function outer