《JavaScript高级程序设计》总结——第3章:Javascript基本概念

一:语法

1:区分大小写
  • ECMAScript中的一切(变量名,函数名,操作符)都区分大小写
2:标识符
  • 标识符:变量名,函数名,属性的名字,函数的参数;
    • 开头:下划线 || 字符 || 美元符号$
    • 其他:字母 || 数字 || 下划线 || 美元符号
  • !:不能把true、false、null、关键字、保留字用做标识符
3:注释
  • 单行注释:// 注释部分
  • 多行注释:
/*这个*必须
* 这个*非必须
* 这个*非必须
*/
4:严格模式
  • ECMAScript5引入了严格模式,为javascript定义了严格模式
  • 作用:在严格模式下,ECMAScript3中的一些不确定行为将得到处理;而且将对某些不安全的操作抛出错误;
  • 使用:在函数内部/脚本顶部添加 ** “use strict” **
5:语句

二:关键字和保留字

  • ECMAScript全部关键字(带*是第五版新增的)
breakdoinstanceoftypeofcaseelsenewvar
catchfinallyreturnvoidcontinueforswitchwhile
debugger*functionthiswithdefaultifthrowdelete
intry
  • ECMAScript全部保留字
abstractbooleambyteconstcharclassdebuggerdouble
enumexportextendsfloatfinalgotointimport
interfaceimplementslongnativepublicprivatepackageprotected
staticshortsupersynchronizedthrowstransientvolatile

ECMAScript5 新增保留字

implementspackagepublicinterfaceprivatestaticletprotected

ECMAScript5 非严格模式下保留字缩减为

classconstenumexportextendsimportsuper

三:变量

  • 松散类型:可以用来保存任意类型的数据;

四:数据类型

  • 6种基本数据类型:Undefined,Null,Boolean,Number,String,Symbol
  • 1种复杂数据类型:Object;
1:typeof操作符

(1) 用途:检测给定变量的数据类型;
(2)用法:

typeof 95;	//"number"
typeof(95);	//"number"
  • typeof操作符可能返回值
操作数对象或null值未声明或声明未赋值函数布尔值数值字符串
返回值“Object”“undefined”“function”“Boolean”“number”“string”

(3) typeof null; //"object",因为null是一个空对象的引用;
(4)typeof 正则表达式:Safari 5及之前版本、Chrome 7 及之前版本对返回"function";其他浏览器返回 “object” ;
(5)操作符typeof和运算符instanceof 区别
https://blog.csdn.net/PINK789/article/details/87915865

2:Undefined类型

(1)只有一个值undefined;
(2)(声明但是未初始化的变量)或(未声明)的变量为undefined;
(3)未声明的变量;

var message; 
typeof(message);			  //undefined
typeof(a);					  //undefined
typeof(message) === typeof(a);//true
undefined == undefined;		  //true
undefined === undefined;	  //true
3:Null类型

(1)只有一个值Null;
(2)Null 是一个空对象指针;
(3)若定义的对象在将来用于保存对象,最好将其初始化为null;

typeof(null);			//"Object"
undefined == null;		//true
undefined === null;		//false
4:Boolean类型

(1)两个字面值:true和false;//true不一定等于1,false不一定等于0
(2)Boolean区分大小写,True和False都不是布尔值;
(3)Boolean() 转型函数,将其他类型的值转为Boolean值;
转换规则

数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串“”(空字符串)
Number任何非零数字值(包括无穷大)0和NAN
Object任何对象null
Undefineda/A(不适用)undefined
5:Number类型
  • 例子
    var a=55; //整数
    var b=025; //八进制的21
    var c=029; //无效的八进制,解析为29
    var d=0xA; //十六进制,解析为10
  • 严格模式下八进制无效;
  • 进行算数计算时,所有以八进制和十六进制表示的数值都会被转换为十进制数值;
    5.1:浮点数值
  • a、保存浮点数值所需空间是整数的二倍;
  • b、e表示法:var floatNum = 3.12e7; //等于31200000
  • c、浮点数的最高精度是17位小数;
  • d、0.1+0.2; //0.30000000000000004
  • e、永远不要测试某个特定的浮点数值;
    5.2:数值范围
  • a、ECMAScript表示的最小数值:Number.MIN_VALUE //5e-324
  • b、ECMAScript表示的最小数值:Number.MAX_VALUE //1.7976931348623157e+308;
  • c、若计算中得到一个超出JacaScript数值范围的值,则该值将被自动转换成Infinity值,(+Infinity或-Infinity)该值无法进行下一次的运算;
  • 函数:isFinite(),判断某值是否位于最大和最小值之间,若是返回true;
    5.3:NaN
  • 用处:用于表示一个本来要返回数组的操作数但是未返回数值的情况;
  • 特点1:0除以0返回NaN;正数/0 => Infinity;负数/0 => -Infinity;
  • 特点2:任何涉及NaN的操作都会返回NaN;
  • 特点3:NaN与任何职都不相等,包括NaN本身;
  • 方法:isNaN(),接受一个参数,用于判断该参数是否"不是数值";
  • 例子:
    isNaN(NaN); //true
    isNaN(10); //false
    isNaN("10"); //false
    isNaN("blue"); //true
    isNaN(true); //false(可被转换为数字1)
  • 在基于对象调用isNaN()时,会首先嗲用对象的valueOf()方法确定该对象能否被转为数值,若不能,则基于该方法调用toString()方法,在测试返回值;
    5.4:数值转换
  • 将非数值转换为数值的三个函数:Number()parseInt()parseFloat()
  • Number()函数用于任何数据类型(转换字符串)
操作值返回值
undefinedNaN
null0
Booleantrue和false转换为1或0
Number简单的传入传出
String——【若字符串只包含数字(包括前面带正负号情况)】数值
String——【若字符串包含有效浮点格式】转换为对应的浮点数值,忽略前导0
String——【若字符串为空】转换0
String——【若字符串包含有效十六进制】转换为相同大小十进制
String——【若字符串包含除上述格式之外的自付】转换为NaN
Object调用对象的valueOf()方法,然后依照前面的规则转换返回值,若转换的结果是NaN,则调用对象的toString()方法然后依照前面的规则返回的字符串值
  • parseInt() 方法:
    • 始终忽略前导空格,直到找到第一个非空格字符;
    • 若第一个字符不是数字字符或负号,返回NaN;
    • 可指定进制;
例子返回值
parseInt("")NaN
parseInt(“70”)70(十进制)
parseInt(“0xA”)10(十六进制)
parseInt(“070”)【ECMAScript 5 =》70】【ECMAScript 3 =》56(八进制)】)
parseInt(“070”,8)56(八进制)
parseInt(“1234blue”)1234
parseInt(“22.5”)22
  • parseFloat() 函数
    • 第一个小数点有效,第二个无效
    • 始终忽略前导0
    • 只解析十进制;
操作返回值
parseFloat(“1234bule”)1234
parseFloat(“0xA”)0
parseFloat(“22.5”)22
parseFloat(“22.5.6”)22.5
parseFloat(“0308”)308
parseFloat(“3.125e7”)31250000
6:String类型

(1)字符字面量

字面量\n\t\b\r\\\’\"\xnn\unnnn
含义换行,制表,空格,回车斜杠单引号双引号以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示"A"以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如,\u03a3表示希腊字符Σ
  • \u03a3表示一个字符
  • 方法一:toString() 方法
    • 数值,布尔值,对象,字符串值都有toString()方法,null和undefined没有
    • 返回字符串的副本
    • 可给toString()方法指定基数 var num=10;num.toString(2); //"1010"

(2)转换为字符串的方法和函数

A: toString() 方法

  • Number,Boolean,String,Object 都有该方法,返回字符串的副本(null 和 undefined没有这个方法);
  • 接受零或一个参数 =》 输出数值的基数;

B: String() 函数

  • 参数为要转换的值;
  • 若值有toString()方法,则调用该方法并返回相应的结果;
  • null 和 undefined 和使用该方法返回null 和 undefined;
7:Object类型

(1) ECMAScript中的对象:一组数据和功能的集合;
(2)创建语法:

var demo = new Object();

(3)Object的每个实例都具有下列属性和方法

  • constructor:保存着当前对象的构造函数;
  • hasOwnProperty(propertyName):检测当前对象实例中是否有给定的属性(而非实例的原型中),其中作为参数PrptertyName必须字符串形式形式指定;
  • isPrototypeOf(Object):用于检查对象是否是传入对象的原型;
  • propertyIsEnumerable(propertyName):用于检查给定的属性能否被for-in语句枚举;(参数为字符串形式)
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应;
  • toString():返回对象的字符串表示;
  • valueOf():返回对象的自妇产、数值或布尔值表示。通常与 toString()方法的返回值相同;

(4)在ECMAScript中Object是所有对象的基础,因此所有的对象都具有这些基本的属性和方法;
(5)ECMA-262中对象有的行为,javascript对象中不一定有(从技术上讲,ECMA-262中对象的行为不一定适用于JavaScript中的其他对象,浏览器环境中的对象,比如BOM和DOM中的对象,都属于宿主对象,他们是由宿主实现提供和定义的。ECMA-262不负责定义宿主对象,因此宿主对象可能会也可能不继承Object;)

五:操作符

  • 适用于很多值,如Boolean,String,Number,甚至对象,不过在应用于对象时相应的操作符通常都会调用对象的**valueOf()**和(或)**toString()**方法
1:一元操作符
  • 定义:只能操作一个值的操作符
  • 1.1:递增递减操作符
  • 规则
    • 应用于包含有效数字字符的字符串时:先将其转换为数字值,再执行加减1操作,字符串变量变成数值变量;var s1 = "2";++s1; //3
    • 应用于不包含有效数字字符的字符串时:先将变量设置为NaN,字符串变量变成数值变量;var s2 = "aa";++s2; //NaN
    • 应用于布尔值:分贝转换为0 和 1再执行加减1操作,布尔值变量变成数值变量;var s3 = false;++s3; //1
    • 应用于浮点数值:执行加减1操作;var s4 = 0.2;++s4; //1.2
    • 应用于对象时:先调用对象的valueOf()方法,以取得一个可供操作的值,然后对该值应用前述规则,若结果是NaN,则在调用toString()方法后再应用前述规则;对象变量变成数值变量;var o = { valueOf: function() { return -1; } };
  • 1.2一元加和减操作符
  • 规则
    • 应用于数值:和数学一样;var a=5;a = +5; //5,无变化
    • 应用于非数值:该操作符会像调用Number()函数一样对该值进行转换;布尔值转为0和1;字符串按照其规则转换;对象调用valueOf()和(或)toString()
2:位操作符
  • ECMAScript 中的所有的数值都以IEEE-754 64位格式存储,但位操作符并不直接操作64位的值,而是先将64位的值转换为32位的整数,然后执行操作,最后再将结果转换为64位;对开发人员来说,由于64位格式是透明的,因此整个过程就像是只存在32位的整数中一样;
  • 对于有符号整数,32位中的前31位用于表示整数值,32位是符号位;
  • 默认情况下,ECMAScript中的所有整数都是有符号整数;
  • 正数:以纯二进制存储,31位中的每一位都表示2的幂;
  • 负数:以二进制补码存储;
    • 计算一个数值的二进制补码
    • (1):求这个数值绝对值的二进制码;
    • (2):求二进制反码,即0替换为1,1替换为0;
    • (3):得到的二进制反码加一;
  • 对特殊的NaN和Infinity值应用位操作符时,这两个值都会被当做0;
  • 对非数值应用位操作符,会先使用Number()函数将该值转换为一个数值(自动完成),然后再应用位操作;
  • 2.1按位非(NOT)(~):返回数值的反码,相当于操作数负值-1操作;
  • 2.2按位与(AND)(&):同1返回1;
  • 2.3按位或(OR)(|):有1返回1;
  • 2.4按位异或(XOR)(^)
  • 2.5左移(<<):操作数将数值的所有值向左移动指定位数,空位0补充;
  • 2.6有符号的右移(>>):用符号位的值补充空位;
  • 2.7无符号的右移(~):以0补充空位;
3:布尔操作符(将值转换为布尔值)
  • 3.1 逻辑非(NOT)(!)
    • 将值转换为布尔值然后对其求反;
    • 规则:
      • 对象:false;
      • 空字符串:true;
      • 非空字符串:false;
      • 0:true;
      • 任意非0数值(包含Infinity):false;
      • null:true;
      • NaN:true;
      • undefined:true;
  • 3.2 逻辑与(&&):短路操作符=》若操作数1为false,则无论操作数2是啥都返回false;
    • 两个操作数
    • 都true返回true;
    • 规则:
      • 操作数1为对象,返回操作数二;
      • 操作数2为对象,则只有在操作数1位true时返回该对象;
      • 操作数1,2均为对象,返回操作数2;
      • 若有一个操作数为null,返回null;
      • 若有一个操作数为NaN,返回NaN;
      • 若有一个操作数为undefined,返回undefined;
  • 3.3 逻辑或(||):短路操作符=》若操作数1为true,则无论操作数2是啥都返回true;
    • 若操作数1是对象,则返回操作数1;
    • 若操作数1的求值结果为false,则返回操作数2;
    • 若俩操作数均为对象,则返回操作数1;
    • 若俩操作数都是NaN,则返回NaN;
    • 若俩操作数都是undefined,则返回undefined;
4:乘性操作符:乘法,除法,求模
  • 乘法规则
    • 均为数值:执行常规乘法计算,若乘积超过了ECMAScript数值的表示范围,则返回Infinity 或-Infinity;
    • 若其中一个操作数是NaN,则结果是NaN;
    • 若Infinity 与0相乘,则结果是NaN;
    • 如果是 Infinity 与非 0 数值相乘,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;
    • 如果是 Infinity 与 Infinity 相乘,则结果是 Infinity;
    • 如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则;
  • 除法规则(/):
    • 均为数值:执行常规乘法计算,若乘积超过了ECMAScript数值的表示范围,则返回Infinity 或-Infinity;
    • 若其中一个操作数是NaN,则结果是NaN;
    • 若0/0,则结果是 NaN;
    • 若0/非0的有限数值,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;
    • 若非0数值/Infinity,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;
    • 若有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则
  • 求模规则(%):
    • 若操作数都是数值,执行常规的除法计算,返回除得的余数;
    • 若(无穷大值)%(有限大的数值),则结果是 NaN;
    • 若(有限大的数值)%(0),则结果是 NaN;
    • 若(Infinity)%(Infinity),则结果是 NaN;
    • 若(有限大的数值)%(无穷大的数值),则结果是被除数;
    • 若0%(任何数),结果是0;
    • 若有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则。
5:加性操作符
  • 加法使用规则:
操作数操作
一个NaN返回NaN
一个字符串转另一个为字符串然后拼接
一个操作数是Number,Boolean,对象toString()方法取得相应的字符串值,再运用字符串规则
undefined 和 null分别调用 String()函数并取得字符"undefined"和"null"
Infinity+InfinityInfinity
-Infinity-Infinity-Infinity
Infinity-InfinityNaN
+0+0+0
+0-0+0
-0-0-0
  • 减法使用规则
操作数操作规则
一个操作数是String,Boolean,null,undefined现在后台调用Number()函数将其转换为数值,再执行其他规则进行计算。若转换的结果是NaN,则结果就是NaN
一个操作数是对象则调用对象的valueOf()方法取得该对象的数值,若得到的值是NaN,则减法的结果就是NaN。若对象没有valueOf()方法,则调用toString()方法并将得到的字符串转换为数值
一个操作数是NaN结果是NaN
6:关系操作符
  • 应用于非数值时转换规则
操作数操作规则
一个操作数是数值将另一个操作数转换为数值,然后进行数值比较
一个操作数是对象则调用对象的valueOf()方法取得该对象的数值,若得到的值是NaN,则减法的结果就是NaN。若对象没有valueOf()方法,则调用toString()方法并将得到的字符串转换为数值
两个操作数都是对象比较字符编码值
一个操作数是布尔值将其转换为数值,在执行比较
  • 若想使字符串按照字母表顺序排序,先使用toLowerCase()方法或toUpperCase()方法将其转换为相同大小写;
  • 任何操作数和NaN比较都返回false;
7:相等操作符
  • == 和!= 比较规则:先转换操作数(强制转型)再比较相等性
    | 操作数 | 转型规则 |
    |–|--|
    | 有一个对象,另一个不是 |调用对象的 valueOf()方法,用得到的基本类
    型值按照前面的规则进行比较 |
    | 两个对象 | 比较他们是不是同一个对象,若是返回true |
    | 有一个操作数是字符串,另一个是数值 | 将字符串转换为数值 |
    | 有一个布尔值 | 转换为0 或1 |
  • 特殊规则
    • null 和undefined是相等的
    • 在比较相等性之前,不能将null和undefined转换为其他值;
    • 操作数中NaN,==返回false;!=返回true;
表达式表达式
null == undefinedtruetrue==1true
“NaN” == NaNfalsetrue==2false
5 == NaNfalseundefined ==0false
NaN==NaNfalsenull==0false
NaN!= NaNtrue“5”==5true
false==0true
  • 全等和不全等
    • 比较操作数及其类型;
    • null===undefined; //false
8:条件操作符
  • result ? a:b;
9:赋值操作符
  • =
  • 复合赋值操作符(*=;/=;%=;+=;-=;<<=;>>=;>>>=),仅仅是简化操作,无任何性能提升;
10:逗号操作符
  • var num=1 , num2=2 , num3=3;

六:语句

  • 1:if语句;
  • 2:do while语句,至少执行一次;
  • 3:while语句;
  • 4:for语句;
  • 5:for-in:
    • 用来枚举对象的属性,顺序不可预测;
    • 先检测对象的变量值是都为null或undefined,因为ECMAScript对该情况不抛出错误而是不执行循环体;
    • 使用方法
	for(var propName inwindow){	//window对象的属性
		console.log(propName);
	}
  • 6:switch语句
switch (i) { 
 case 25: 
 alert("25"); 
 break; 
 case 35: 
 alert("35"); 
 break; 
 case 45: 
 alert("45"); 
 break; 
 default: 
 alert("Other"); 
} 
  • 7:label语句
    • 可以在代码中添加标签,以便将来使用;
    • 使用示例:
start:for(var i=0;i<count;i++){
	console.log(i);
}
//该start标签可以在将来由break或continue语句引用,加标签的一般都要与for语句等循环语句配合使用
  • 8:break 和continue语句
    • break:立即退出循环;
    • continue:立即退出循环从循环顶部继续执行;
    • 与label语句联合使用,从而返回代码中特定的位置;
var num = 0;
outermost:
for (var i=0 ; i<10; i++){
	for (var j=0; j < 10; j++) { 
		 if (i == 5 && j == 5) { 
 		break outermost; 
 	} 
 	num++; 
 } 
}
alert(num);	//55
  • 9:with语句(严格模式下使用该模式报错;该语句会导致性能下降不建议使用;)
    • 作用:将代码的作用域设置到一个特定的对象中
    • 示例:
var qs = location.search.substring(1); 
var hostName = location.hostname; 
var url = location.href; 
//上面几行代码都包含location对象,使用with语句改写如下
with(location){ 
 var qs = search.substring(1); 
 var hostName = hostname; 
 var url = href; 
} 

七:函数

1:理解参数
  • ECMAScript不理会传入参数数量以及类型
  • arguments对象保存传入函数的参数
2:没有重载
  • 定义:相同名称的函数或者函数有不同的参数列表,这样的函数或方法互相称之为重载函数或方法;
  • 因为ECMAScript函数的参数是由包含0或多个值的数组表示的,而没有函数签名(参数类型不同和数量不同),所以如果定义了两个名字相同的函数,该名字只属于后者

八:小结

  • ECMAScript 中的基本数据类型包括 Undefined、Null、Boolean、Number 和 String;
  • 与其他语言不同,ECMScript 没有为整数和浮点数值分别定义不同的数据类型,Number 类型可用于表示所有数值;
  • ECMAScript 中也有一种复杂的数据类型,即 Object 类型,该类型是这门语言中所有对象的基础类型;
  • 严格模式为这门语言中容易出错的地方施加了限制。
  • ECMAScript 提供了很多与 C 及其他类 C 语言中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等;
  • ECMAScript 从其他语言中借鉴了很多流控制语句,例如 if 语句、for 语句和 switch 语句等。

ECMAScript 中的函数与其他语言中的函数有诸多不同之处。

  • 无须指定函数的返回值,因为任何 ECMAScript 函数都可以在任何时候返回任何值。
  • 实际上,未指定返回值的函数返回的是一个特殊的 undefined 值。
  • ECMAScript 中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式传递的
  • 可以向 ECMAScript 函数传递任意数量的参数,并且可以通过 arguments 对象来访问这些参数
  • 由于不存在函数签名的特性,ECMAScript 函数不能重载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值