一、原始值和引用值
原始值:存储在栈(stack)中的简单数据段,它们的值直接存储在变量访问的位置。
引用值:存储在堆(heap)中的对象,存储在变量处的值是一个指针,指向存储对象的内存处。
二、原始类型:(基本数据类型)
undefined、null、boolean、number、string
三、typeof运算符(判断基本数据类型)
输出结果:undefined、boolean、number、string、object
1、undefined
当一个未声明的变量和一个声明但并未初始化的变量使用typeof都会输出undefined,如下代码所示
var value1; //var value2 console.log(typeof value1);//undefined console.log(typeof value2);//undefined
PS:当函数无明确返回值时,返回的也是undefined。
2、null类型
undefined派生自null。null表示尚未存在的对象。
3、number类型
(1)八进制:首数字为0;
(2)十六进制:首数字为0x;
(3)ECMAScript默认把6个或6个以上的前导0的浮点数转换为科学计数法;
(4)几个被定义为Number类型的特殊值:
Number.MAX_VALUE
Number.MIN_VALUE
(5)isFinit()方法:确定该数不是无穷大
(6) NaN (非数),特性:不能用于算数计算;
与自身不相等;
(7) isNaN()方法:确定是否为NaN;
4、String类型
首字符从位置0开始,字符串最后一个字符的位置是字符串的长度减1;
四、转换
1、转换成字符串:toString()方法
Boolean类型:输出“true”或“false”
Number类型:根据两种模式:
默认模式:相应数字值得字符串输出;
基模式:输出不同进制形式数字对应的字符串;
2、转换成数字
只有对string类型调用这些方法才能正确运行,对其他类型返回NaN;
parseInt():
运行机制:从位置0开始查找判断是否为有效数字,如果不是返回NaN,如果是则继续向后查找,直到找到非有效数字,将之前的字符串转换为数字。
PS:parseInt()方法有基模式,将二进制、八进制、十六进制的字符串转化为整数,由第二个参数指定。
parseFloat():
运行机制:从位置0开始查找每个字符,直到出现第一个非有效字符,将之前的字符串转化为数字。第一个出现的小数点是有效字符,第二个是无效的。
PS:字符串必须以十进制形式表示浮点数,不能用八进制或十六进制形式,没有基模式。
3、强制类型转换
Boolean(value):
(1)转换成Boolean类型;
(2)转换的值至少是有一个字符的字符串、非0数字或对象时,返回true;
(3)转换的值为空字符串、数字0、undefined、Null,返回false;
Number(value):转换成数字;
(1)与parseInt(),parseFloat类似,但转化的是整个值,不是部分值。如果字符串值能完整的被转换,Number()将判断调用parseInt()还是parseFloat()。
String(value):将任何值转换成字符串;
五、引用类型
1、Object类
2、Boolean类
3、Number类
(1)toFixed()方法:返回具有指定位数小数的数字的字符串表示,参数是几说明了应该显示几位小数。
toExponential()方法:返回科学计数法表示的数字的字符串形式。参数是指定要输出的小数的位数。
toPrecision()方法:参数表示数的数字总数,不包括指数。
PS:这些方法都会进行舍入操作。
4、String类
(1)valueOf()和toString()方法都会返回string类型的原始值;
var oStr = new String("hello"); console.log(oStr.valueOf() === oStr.toString()) //true
(2)length属性
(3)charAt():返回包含指定位置处的字符的字符串;
charCodeAt():返回包含指定位置处的字符的字符代码;
concat():将一个或多个字符串连接到String对象的原始值上,该方法会保持原始的String对象不变;
(4)indexOf():从位置0开始检索,返回指定的子串在另一个字符串中的位置。(-1表示没有找到)
lastIndexOf():从字符串结尾开始检索,返回指定的子串在另一个字符串中的位置。(-1表示没有找到)
(5)localeCompare():对字符串值进行排序,参数是要进行比较的字符串;
(6)slice():第一个参数是要获取的子串的起始位置,第二个参数是要获取子串终止前的位置,省略的话就默认为字符串的长度。
substring():同上;
PS:当两者参数为负数时有些不同;slice()会用字符串长度加参数,substring将其作为0处理(忽略);
(7)toLowerCase():字符串转换为全小写;
toUpperCase():转化成全大写;
5、instanceof运算符
xxx instanceof Object(Object/Array/Date/Function);
六、运算符
1、delete:删除对以前定义的对象属性或方法的引用
1 var o =new Object(); 2 o.name = "coco"; 3 console.log(o.name);//coco 4 delete o.name; 5 console.log(o.name);//undefined
PS:不能删除开发者未定义的属性和方法,如原始的ECMAScript方法。
2、void:对任何值都返回undefined,通常用于避免输出不应该输出的值。
<a href="javascript:void(window.open('about:blank'))">click</a>
3、(1)前增量运算符:(++num,--num)
先加减后运算;
(2)后增量运算符:(num++,num--)
先运算后加减;
4、一元运算符
5、位运算符
(1)位运算NOT(~)
(2)位运算AND(&)
(3)位运算OR(|)
(4)位运算XOR(^)
(5)左移运算(<<)
(6)有符号右移运算(>>)
(7)无符号右移运算(>>>)
6、Boolean运算符
(1)逻辑NOT(!)
PS:两个!!给出变量真正的boolean值;
(2)逻辑AND(&&)
PS:如果第一个运算数是false,则不再计算第二个运算数,结果为false。
(3)逻辑OR(||)
PS:如果第一个运算数是true,则不再计算第二个运算数,结果为true。
7、乘性运算符
(1)乘法运算符(*)
(2)除法运算符(/)
(3)取模运算符(%)
8、加性运算符
(1)加法运算符(+)
(2)减法运算符(-)
9、关系运算符
10、等性运算符
(1)等号(==)和非等号(!=)
如果一个运算数是Boolean值,在检查相等性之前,将它转换成数字值;false->0;true->1;
如果一个运算数是字符串,另一个是数字,在检查相等性之前,尝试将字符串转换成数字;
null与undefined相等;
不能将null和undefined转换成其他值;
(2)全等号(===)和非全等号(!==)
只有在无需类型转换运算数就相等的情况下才返回true;
11、条件运算符(三元)
12、赋值运算符(=、+=、-=、*=、/=、%=、>>=、<<=)
七、语句
1、if语句
2、迭代语句
(1)do-while语句:计算表达式之前至少会执行循环主体一次;
(2)while语句
(3)for语句
(4)for-in语句:遍历对象的可枚举属性;
(5)break语句:立即退出循环;
continue语句:退出当前循环,进行下一次循环;
(6)with语句
(7)switch语句
八、函数
1、无重载
2、arguments
length属性
3、Function类
4、闭包