前言:纯手打!!!按照本身思路重写!!!此次是二刷了,想暑假作一次完整的笔记,但用本子来写笔记的话太贵了,可能哪天还丢了。。因此仍是博客好==数组
第三章:基本概念(语法、数据类型、流控制语句、函数)安全
3.1 语法:函数
ECMAScript的语法大量借鉴了C及其余语言。测试
3.1.1 区分大小写this
3.1.2 标识符:编码
指的是变量、函数、属性的名字、函数的参数。注意:首字符必须是一个字母、下划线、或者美圆$符号。spa
ES标识符采用驼峰大小写格式(首字母小写,其余单词的首字母大写,如:setData),不能够把关键字、保留字、true、false、null做为标识符。debug
3.1.3 注释:指针
单行注释: //code
块级注释: /* *内容 */
3.1.4 严格模式:对某些不安全的操做抛出错误
在脚本中启动严格模式,能够在其顶部写一行代码:"use strict" 。
3.1.5 语句:
以分号结尾,其实也能够不写,但最好写。。。
3.2 关键字和保留字:(这些都不能够做为标识符)
关键字大体为: break、else、new、var、 case、 finally 、 return、 void 、 catch 、for 、switch 、 while 、 continue、 function 、this 、 with 、default 、 if 、 throw 、 delete 、 in 、 try 、do 、 instranceof、 typeof。。。
保留字大体位: abstract 、 enum 、int 、 short 、 boolean 、export 、interface、 static、 byte 、extends 、 long 、 super 、 char 、 final 、native 、synchronized 、 class 、float 、 package 、throws 、 const 、goto 、private 、transient 、 debugger 、 implements 、protected 、 volatile 、 double 、import 、public、class、entends、super、const、export、import、let、public。。。、
3.3 变量:
3.4 数据类型:
3.4.1 typeof操做符:
检测给定变量的数据类型——typeof
如:var message = "some string";
alert(type of message); //"string"
alert(type of null); //”object"
3.4.2 Underfined类型:
var message; var message1 = undefined; var age
alert(message == undefined); //true
alert(message); //undefined
alert(age); //产生错误
alert(message1 == underfined); //true
3.4.3 Null类型:
null值表示一个空对象指针,因此用typeof检测会返回“object”。
var car = null;
alert(typeof car); //"object"
!!!注意 undefined值是派生自null值的,因此 alert(null == undefined); //true
3.4.4 Boolean类型:
该类型只有两个字面值:true和false。
数据类型 |
转换为true的值 |
转换为false的值 |
---|---|---|
Boolean |
true |
false |
String |
任何非空字符串 |
" "(空字符串) |
Number |
任何非0数字值(包括无穷大) |
0和NaN |
Object |
任何对象 |
null |
Undefined |
n/a(不适用) |
undefined |
这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换很是重要:
var mesage = "Hello World";
if (message) { // 这个message自动转换了对应的Boolean值——ture
alert("Value is true");
}
3.4.5 Number类型:
数值字面量格式:(在进行算术计算时,全部八进制和十六进制表示的数值最终都将被转换成十进制数值)
后面的数值被看成十进制来看,var octalNum1 = 070; //八进制的56 var octalNum2 = 079; //无效的八进制,解析为79
Number() :能够用于任何数据类型,转型函数将其转换为数值。
parseInt():处理整数的时候经常使用:
parseFloat() :与parseInt()的类似与区别是 都是从第一个字符开始解析,只认识一个小数点,会忽略一开始的0,只识别十进制,而十六进制的字符串会被转换为0
3.4.6 string类型:即字符串
能够由双引号和单引号表示。
\n 表示换行,\t 表示制表,\b表示退格,\r表示回车,\\表示斜杠,\'表示单引号,\"表示双引号,\xnn表示以十六机制代码nn表示的一个字符(n为0~F),\unnnn表示以十六进制代码nnnn表示的一个Unicode字符(n为0~F)。
!!!注意,n个字符长的转移序列只表示一个字符(在length里表示1)
可传参也能够不传参,参数表示以n进制格式(基数)返回数值,默认不填为十进制。
var num = 10;
alert (num.toString()); // "10"
alert (num.toString(2)); // "1010"
alert (num.toString(8)); // "12"
alert (num.toString(10)); // "10"
alert (num.toString(16)); // "a"
3.4.7 Object类型:就是对象!即一组数据和功能的集合。
对象能够经过执行new操做符后跟要建立的对象类型的名称来建立,即 var o = new Object (); 若是不用给构造函数传参,也能够这么写:var o = new Object;但不推荐。
关于Object的每一个实例的具体属性和方法,第5、六章再讨论。
3.5 操做符:
是用于操做数据值的操做符,包括算术操做符、位操做符、关系操做符、相等操做符。
3.5.1 一元操做符:
var num1 = 2; var num2 = 20; var num3 = num1-- + num2; //等于22,由于是后置,因此在var num3语句里它不改变先,等到这条语句被求值以后才改变 var num4 = num1 + num2 ; //等于21,num1=1。
valueOf : function () {
return -1;
}
}
3.5.2 位操做符:本小节暂不讲解。。。。。。。
3.5.3 布尔操做符:
若使用两个!那就是反过来咯。
若第一个操做数能决定结果了,那第二个就无视。即第一个是false,那就不看第二个了。若第一个是true,那仍是会去看第二个(第二个不可使用未定义的值)。
若两个操做数都是对象,则返回第二个操做数;若第一个操做数是null,则返回null;若第一个操做数是NaN,则返回NaN;若第一个操做数是undefined,则返回undefined;
第一个操做数 |
第二个操做数 |
结果 |
---|---|---|
true |
true |
true |
true |
false |
false |
false |
true |
false |
false |
false |
false |
若第一个操做数能决定结果了,那第二个就无视。即第一个是true,那就不看第二个了。若第一个是false,那仍是会去看第二个(第二个不可使用未定义的值)。
若两个操做数都是对象,则返回第一个操做数;若两个操做数都是null,则返回null;若两个操做数都是NaN,则返回NaN;若两个操做数都是undefined,则返回undefined;
第一个操做数 |
第二个操做数 |
结果 |
---|---|---|
true |
true |
true |
true |
false |
true |
false |
true |
true |
false |
false |
false |
3.5.4 乘性操做符:乘法、除法和求模,会自动把非数值的操做符转换位数值(即自动用Number()转换)
3.5.5 加性操做符:加法、减法
!!!最重要的来了,若是两个操做数都是字符串,则将第二个操做数与第一个操做数拼接起来;若是只有一个操做数是字符串,则将另一个操做数转换为字符串,再将第二个操做数与第一个操做数拼接起来。
若是有一个操做符是对象、数组或布尔值,则调用它们的toString() 方法取得相应的字符串值;对于undefined和null,则分别调用String()函数并取得”undefined“和”null“。
例题:var num1 = 5; var num2 = 10; var message = "The sum of 5 and 10 is" + num1 + num2; alert(message); //"The sum of 5 and 10 is 510" ;
var num1 = 5; var num2 = 10; var message = "The sum of 5 and 10 is" + (num1 + num2); alert(message); //"The sum of 5 and 10 is 15" ;
var result1 = 2 + true; // 3,由于true被Number()函数转换成1
!!!最重要的来了,它和加法不同,不拿来拼接什么鬼字符串。
!!! (主要是使用了Number()函数)
例题:var result1 = 5 - true; //4
var result2 = NaN - 1; //NaN
var result3 = 5 - 3; //2
var result4 = 5 - " "; //5
var result5 = 5 - ”2“; //3
var result6 = 5 - null; //5
3.5.6 关系操做符:大于、小于、小于等于、大于等于:
相应规则:
例题:var result = "a" < 3; //false,字符串a不能被转换成合理的数值,因此”a"被转换成NaN
var result1 = "23" < "3"; //true,比较的是字符编码
var result2 = "23" < 3; //false,由于”23“变成了23
3.5.7 相等操做符:==、!= ,===、!== :
表达式 |
值 |
---|---|
null == undefined、false == 0、NaN != NaN、”5“ == 五、true == 1 |
true |
”NaN“ == NaN、5 == NaN、NaN == NaN、null == 0、undefined == 0 |
false |
未完、待续。