js高级程序设计知识点总结:3-基本概念

3-1 语法
区分大小写;标识符由字母、数字、美元符、下划线组成,其中数字不能做开头,常用驼峰格式;每条语句末尾用分号分隔,可有可无,建议有;

3-3 变量
js变量是松散类型(弱类型),可以保存任意类型的数据,每个变量仅仅是一个保存值的占位符;
var定义变量,已定义的变量未初始化默认值为undefined,一条语句可同时定义多个变量,用逗号分隔;
js变量有全局变量和局部变量,js只有函数作用域,没有块级作用域,变量在作用域中才可访问;

3-4 数据类型
1、五种基本数据类型:Undefined、Null、Boolean、Number、String,一种复杂数据类型:Object,js不支持自定义数据类型;
2、typeof操作符可用来区分基本数据类型和复杂数据类型(null除外),typeof的操作数可能是变量也可能是数值字面量,使用typeof可能的返回值有:
number(数值)、string(字符串)、boolean(布尔值)、undefined(未初始化或未定义)、object(对象或null)、function(函数)
3、转型函数Boolean()可以将任意类型的数据转换成boolean值,可转换为false的值有:空字符串、0、NaN、null、undefined,其余的均为true;if语句会自动调用这个函数进行转换;
4、js会将小数点后6个零以上的浮点数自动转换成科学记数法表示,浮点数最高精度为17位小数,计算时具有舍入误差,导致0.1+0.2 =0.300000000000000004;
5、js数据范围:Number.MIN_VALUE(5E-324)、Number.MAX_VALUE(1.79769E308);Infiniy(正无穷)、-Infinity(负无穷);i是Finite()函数能确认数值是否有穷的;
NaN:特殊数值,表示一个本来要返回数值的操作数未返回数值的情况;0/0=NaN;任何涉及NaN的操作都会返回NaN;NaN与任何值都不想等,包括它本身;isNaN()对所有不能转换为数值的值返回true;
6、数值转换
Number():可转换任何数据类型,结果如下:
Boolean=>0/1;Null=>0;undefined=>NaN;
字符串:全数字,包括正负号=>十进制数,忽略前面的0(浮点数也一样、十六进制转换为十进制);空字符串=>0;不符合上述条件=>NaN;
对象:先调用其valueof()方法,依据前面的规则转换返回值;若转换结果为NaN,则再调用其toString()方法依据前面的规则处理;
parseInt():转换字符串,转换原理:
从前往后,找到第一个非空格字符,若其不是数字或者负号,返回NaN(空字符串也返回NaN);若其为数字字符,则继续往后查找,直到解析完所有字符或者遇到一个非数字字符;
parseInt()默认可识别十进制与十六进制(0X开头),ES5开始不可识别八进制,但是它提供了第二个参数,用来指定转换的基数(进制数,2/8/10(默认)/16),传入16则字符串可省略‘0X’;
paredFloat():转换字符串,与parseInt()区别在于:
1)、字符解析时首个小数点有效,后面的小数点都无效;
2)、它始终会忽略前导的零,即它只能解析十进制数,十六进制数全部会返回0,八进制当作十进制;如果传入的字符串是可解析为整数的值(无小数点或者小数点后全是零),则返回整数;
7、String:以单引号或双引号表示,通过length属性返回其字符数;字符串一旦创建值则不可变,要更改则需要销毁之前的值,所以旧版浏览器字符串拼接速度很慢;
toString()方法:数值,布尔值、对象和字符串值都有这个方法,null和undefined没有;该方法支持传入一个参数表示输出数值的基数(2/8/10/16);
String()方法:转型函数,针对所有数据类型;首先判断是否有toString()函数,有则调用(无参数);没有则null=>’null’,undefined=>’undefined’,即返回其字面量值;
8、Object类型:对象其实就是一组数据和功能的集合,Object类型是所有它的实例的基础,通用的属性和方法有:
constuctor:保存用于创建当前对象的函数,即构造函数;
hasOwnProperty(propertyName):判断某一属性是否存在于当前实例中,属性名必须以字符串形式指定;
isPrototypeof(Object):判断当前对象是否是传入对象的原型;
propertyIsEnumerable(propertyName):属性是否可使用for-in语句枚举,属性名必须为字符串;
toString():返回对象的字符串表示;
toLocaleString():按执行环境的地区返回对象的字符串表示;
valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()返回值相同;

3-5 操作符
自增自减操作符、加减操作符:对任何值都适用,字符串布尔值会转换成数字,对象会调用其valueof()方法再进行操作,若其返回NaN,则再调用其toString()方法转换后再处理;
ECMAScript中所有数值都以IEEE-754 64位格式存储,但位操作符会将其转成32位,处理完后再将结果转成64位;有符号数第32位为符号位(0正1负),ES中默认所有整数都是有符号整数,
位操作符有:~(按位非)、&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(有符号右移)、>>>(无符号右移);其中左移右移不影响符号位,空位用0来填充;有符号右移保留符号位,
用符号位填充空位;无符号右移会移动32位,对于正数来说与有符号右移结果相同,对于负数来叔说,是用0来填充空位,会导致结果变得非常大;
布尔操作符:
!(逻辑非):可返回true的有:NaN、null、undefined、0、空字符串,其余均为false,包括无穷大;
&&(逻辑与):若第一个操作数为对象或其求值结果为true,则返回第二个操作数;若有一个操作数为null/undefined/NaN,则返回null/undefined/NaN;
||(逻辑或):若第一个操作数为对象可转为true,则返回第一个操作数;若两个操作数都是null/undefined/NaN,则返回null/undefined/NaN;
乘(*):操作前后台会调用Number()将两个操作数转换成数值;结果超出数字范围则返回正负Infinity;Infinity与0相乘为NaN,与非0相乘为Infinity(区分符号),任意数与NaN结果为NaN;
除(/):非数值用Number()进行转换,任意数与NaN结果为NaN;Infinity除Infinity为NaN,0/0=>NaN,非0数值/0=>Infinity(区分正负);
求模(%):转换规则一致,无穷大%有限值=NaN,有限值%0=NaN,Infinity%Infinity=NaN,有限值%无穷大=该有限值,被除数是0则结果为0;
加:会转换,Infinity+(-Infinity) = NaN,+0+(-0)=+0,字符串操作,则将非字符串调用toString()进行转换,null/undefined则调用String()方法转换成’null’/‘undefined’;
减:会转换,Infinity-Infinity=NaN,(-Infinity)-(-Infinity)=NaN,+0-(-0)=-0,(-0)-(-0)=+0,有操作数是非数值,则调用Number()方法进行转换;
关系操作符(<、>、<=、>=):若一个为数值,则将另一个也转换为数值,若都为字符串,则比较对应对应字符的字符编码值,布尔值转换成数值,对象则顺序调用其valueof()、toString()转换;
相等操作符:全等不进行转换,比较值和类型;相等操作符会进行类型转换,布尔值转换成数值,字符串与数值比较时转换成数值,对象会调用valueof()方法,null==undfined=>true;
逗号操作符可用于一条语句执行多个操作,定义多个变量等;还可用于赋值,此时返回表达式的最后一项;

3-6 语句
if语句自动调用Boolean()进行转换;do-while语句条件前置,至少执行一次;for-in语句遍历对象的属性;label语句用于设置标签;with语句用于将代码作用域设置到一个指定对象中,严格模式下不允许
switch语句比较时采用的全等操作符;

3-7 函数
函数不必指定返回值,在执行return后停止并自动退出;js中的函数调用时参数的个数和类型均不做限定,在其内部用一个数组来表示,可通过arguments对象来访问传入的参数,这个值类似数组却不是数组;
arguments的length属性指定了参数的个数,arguments的值与命名参数的值保持同步,即在函数内同步改变;没有传入值的命名参数默认为undefined;
js中的函数没有重载,同名函数只会覆盖前者,因为它没有函数签名即接受的参数的类型和数量;