注释
ECMAscript的注释包括单行注释和块级注释;
//单行注释
/*
* 块级注释
* 块级注释
*/
扫盲点: 虽然块级注释的的第2、3行都以一个星号开头,但这并不是必须的 。只是为了提高注释的可读性。
typeof
ECMAscript有5种简单数据类型(String, Number, Boolean, Null, Undefined)和一种复杂数据类型(Object);
typeof的返回值有
- undefined 对应 Undefined
- boolean 对应 Boolean
- string 对应 String
- Object 对应 Object 或 Null
- function 如果变量为函数
扫盲点:
- 函数属于对象,并不是单独的一种数据类型,但typeof对对象和函数做了区分。
- typeof是操作符,并不是函数,所以typeof后括号可有可无
var msg = 'message';
typeof 88; //number
typeof (msg) //string
- typeof一个未声明和未初始化的值,返回的都为undefined
var a; //未初始化
// var b; 未声明
typeof a; // undefined
typeof b; // undefined
null
null表示一个空对象指针,因而 typeof null返回的是object。
扫盲点:
- 除非显示指定为null,否则不会得到null。(相对于undefined而言,一个值只要声明未定义,便可得到undefined)
- null的意义:如果变量将来准备用于保存对象,那最好初始化该变量为null。不仅可以体现null作为空对象指针的惯例,也有助于区分null和undefined。
NaN
扫盲点
- NaN不与任何值相等
string
扫盲点:
-
toString():
- number,boolean,object,string都有 toString()方法;
- undefined和null没有toString()方法;
-
String():
- 如果参数有toString()方法,则调用toString();
- 如果为 null,返回 “null”;
- 如果为undefined , 返回 “undefined”
Object
扫盲点:
- constructor:保存着用于创建当前对象的函数,即构造函数
- hasOwnProperty: 用于判断属性在对象的实例中是否存在(而不是在原型中)
label语句
label:
扫盲点:
outerFor:
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (i === 1 && j === 1) {
break outerFor;
}
console.log(i + "" + j)
}
}
// 当if中语句为true时,break outerFor不仅跳出了内部循环,也跳出了外部循环
// 00
// 01
// 02
// 10
function
扫盲点:
ECMAscript函数不介意传递参数的个数以及类型,因为参数在内部是使用一个数组表示的,即arguments。
Array
扫盲点:
操作方法:
- concat: 拼接数组,并返回新数组。
var colors = [1, 2, 3];
var colors2 = colors.concat(4, [5, 6]) ; //[1,2,3,4,5,6]
-
slice: 截取数组,并返回新数组。
- 传一个参数,则从起始位置截取到最后以为
- 传两个参数,则从起始位置截取到结束位置
- 包含起始位置,不包含结束位置
-
splice: 传入不同的参数(共有三个参数:起始位置,要删除的项数,要插入的项)可以实现不同的功能,并返回从从原数组中删除的项。
- 删除:
arr.splice(起始位置,删除项数)
- 插入:
arr.splice(起始位置,0,插入项...)
- 替换:
arr.splice(起始位置,删除项数,插入项...)
- 删除:
位置方法: indexOf()、lastIndexOf()
迭代方法:
- every: 如果函数对每一项都返回true(即全部满足条件),则返回true,
- some: 如果函数对任一项返回true(即至少有一项满足条件),则返回true;
- filter: 返回函数回返回true的项组成的数组(即过滤出数组中符合条件的项);
- map: 返回每次函数调用结果组成的数组(即对数组中每一项做操作);
- forEach 对数组每一项运行函数,没有返回值(即基于数组的数据做其他操作)
归并方法:
- reduce()、reduceRight()
- 接受的函数接收四个参数:前一个值,当前值,项的索引,数组对象
- 函数的返回值,会作为第一个参数自动传递给下一次迭代
- 第一次迭代发生在数组的第一项,所以第一个参数为数组的第二项,第二个参数为数组的第二项。
- reduceRight 即反方向做相同操作。
// 使用reduce实现数组求和
var arr = [1,2,3,4,5];
var sum = arr.reduce(function(pre, curr, idx, array){
return pre + curr;
})
console,.log(sum); // 15
RegExp
扫盲点:
- 正则模式中所有元字符(这些字符在正则表达式中都有一种或多种用途,如果想要匹配这些字符,需要转义):
( ) [ ] { } \ ^ $ | ? * + .
函数
扫盲点:
- 由于函数是对象,所以函数名保存的实际上是指向函数对象的指针。
- arguments的属性callee: 指向拥有此arguments的函数。
// 递归函数中,函数的执行与函数名耦合在一起。
function factorial(num){
if(num <= 1){
return 1;
}else{
reutrn num * factorial(num - 1);
}
}
// 递归函数中的函数名解耦,arguments.callee即为当前函数
function factorial(num){
if(num <= 1){
return 1;
}else{
reutrn num * arguments.callee(num - 1);
}
}
- caller:当前函数的调用者。
基本包装类型
ECMAscript提供了三种特殊的引用类型:Boolean、String、Number。这些类型与引用类型相似,但同时具有基本类型相应的特殊行为。
扫盲点:
var str = 'some text';
var str = str.substring(2);
str变量为基本类型,但是却有相似于引用类型的方法。其实在访问字符串时,后台会完成下列处理:
+ 创建String类型的一个实例;
+ 在实例上调用指定的方法;
+ 销毁这个实例
引用类型与基本包装类型的区别在于对象的生存期:
+ 引用类型(即使用new操作符创建的)实例:在执行流离开当前作用域之前都会保存在内存中;
+ 自动创建的基本包装类型:只存在于一行代码的执行瞬间
基本包装类型---Number
扫盲点:
- toString:接收一个参数,表示返回几进制数值的字符串形式;
- toFixed: 接收一个参数,表示保留几位小数。(补0或舍入来保证小数位数);
- toExponential:返回指数表示法的字符串格式。(接收一个参数便是小数点位数);
- toPrecision:可能返回规定大小格式,也可能返回指数格式,具体看哪种规则更合适(接收一个参数表示所有数字位数,不包括指数部分)
基本包装类型---String
扫盲点:
- length属性:返回字符串的长度;
- 字符方法:
- charAt: 接受一个基于0的表示字符位置的数字,返回字符串中在此位置的字符;
- charCodeAt:同chatAt,返回字符的字符编码;
- 也可同数组一样通过中括号访问字符;
var str = 'hello world'; str.charAt(1); // 'e' str.charCodeAt(1); //'101' 即‘e’的字符编码 str1[1]; // 'e'