JavaScript高级程序设计学习笔记1: 基础
一、语法:
1、区分大小写。
2、变量是弱类型。
3、每行结尾的分号可有可无。如果没有分号,以这行代码的结尾看作该语句的结尾。
二、变量
1、同一个var语句可以定义多个变量,而且不必具有相同的类型。
如:var test = "hi", age = 25;
2、变量名需要遵守两条简单的规则:
(1)第一个字符必须是字母、下划线(_)或美元符号($)。
(2)余下的字符可以是下划线、美元符号或任何字母或数字字符。
3、使用变量之前不必声明,解释程序遇到未声明过的标识符时,用该变量名创建一个全局变量,并将其初始化为指定的值。
var sTest = "hello "; sTest2 = sTest + "world"; alert(sTest2); //输出 "hello world"
三、原始类型
5种原始类型:Undefined、Null、Boolean、Number、String
可以用 typeof 运算符检查变量或值的类型,其中对于引用类型或null值会返回“object”:
如:
var sTemp = "test"; var sTemp2; //输出 "string" var oNull = null; //输出 "string" alert(typeof sTemp); //输出 "string" alert(typeof 9); //输出 "number" alert(typeof sTemp2); //输出 "undefined" alert(typeof oNull); //输出 "object"
1、Undefined
声明的变量未初始化时,该变量默认值是Undefined;
当函数无明确返回值时,返回值也是Undefined;
2、Null
用于表示尚未存在的对象。
3、Boolean
进行比较时,==与===的区别:
进行双等号==比较时,先检查两个操作数数据类型,如果相同,则进行===比较,如果不同,则进行类型转换成相同类型后再进行比较:
(1)如果其中一个是Boolean值,则转换成数字,false转换成0,true转换成1;
(2)如果其中一个是字符串,一个是数字,字符串转成数字;
(3)如果一个是对象,一个是字符串,对象转成字符串(调用toString()方法);
(4)如果一个是对象,一个是数字,对象尝试转成数字;
(5)null 和 undefined相等;
(6)如果两个都是对象,比较它们引用值;
而===比较时,如果类型不同,直接就是false。
例子:
null == undefined //true 0==true //false 1==true //true 2== true //false null === undefined //false 0===true //false 1===true //false 2=== true //false
4、Number
八进制字面量的首数字是0,如 var iNum = 070; //即等于10进制的56
十六进制字面量的前2位是0x,如var iNum = 0x1f; //即等于10进制的31
浮点值必须包括小数点和小数点后一位数字,如1.0而不是1
NaN表示非数(不是数字),NaN == NaN等于flase,一般用函数isNaN判断是否数字
5、String
字符串字面量可使用双引号或单引号声明。
四、转换
1、Number类型转换成字符串
有两种模式:默认模式和基模式,基模式可以用不同的基输出数字,例如二进制的基是2,八进制的基是8,十六进制的基是16。
var iNum = 10; alert(iNum.toString()); //输出 "10" alert(iNum.toString(2)); //输出 "1010" alert(iNum.toString(8)); //输出 "12" alert(iNum.toString(10)); //输出 "10" alert(iNum.toString(16)); //输出 "A"
2、非数字的原始值转换成数字
(1) parseInt() 转换成整数
(2) parseFloat() 转换成浮点数
parseInt()方法首先查看位置0处的字符,判断它是否是个有效数字;如果不是,该方法将返回NaN,不再进行继续执行其他操作。但如果该字符是有效数字,该方法将查看位置1处的字符,进行同样的测试,这一过程将持续到发现非有效数字的字符为止,此时parseInt()将把该字符之前的字符串转换成数字。如
var iNum1 = parseInt("1234blue); //return "1234" var iNum2 = parseInt("0xA"); //return "10" var iNum3 = parseInt("22.5"); //return "22" var iNum4 = parseInt("blue"); //return "NaN"
3、强制类型转换
(1) Boolean(value)
如果要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。
如果该值是空字符串、数字0、undefined或null,它将返回false。
var b1 = Boolean(""); //false var b2 = Boolean("hi"); //true var b3 = Boolean(100); //true var b4 = Boolean(null); //false var b5 = Boolean(0); //false var b6 = Boolean(new Object()); //true
(2) Number(value)
Number()的强制类型转换与parseInt()和parseFloat()的处理方式相似,不同的是它转换的是整个值,而不是部分值。
Number(false) //0 Number(true) //1 Number(undefined) //NaN Number(null) //0 Number("5.5") //5.5 Number("56") //56 Number("5.6.7") //NaN Number("new Object()") //NaN Number("100") //100
(3) String(value)
可把任何值转换成字符串,和toString()的区别是转换null或undefined可以生成字符串而不引发错误。
var s1 = String(null); //null var oNull = null; var s2 = oNull.toString() ; //引发错误
五、用arguments对象模拟函数重载
function test(){ if(arguments.length == 1) alert(arguments[0] + ",你好"); else if(arguments.length == 2) alert(arguments[0] + "," + arguments[1] + ",你们好") else alert("大家好"); } test(); //输出: 大家好 test("a"); //输出: a,你好 test("a","b"); //输出: a,b,你们好 test("a","b","c","d"); //输出: 大家好
六、创建函数
创建函数有2种方式:
1、函数声明
function test(){ console.log('test'); }
调用函数,FunctionName(),上面例子:
test();
如果直接像下面这样,会报语法错误:
function test(){ console.log('test'); }();
但是如果将函数体部分用()包裹起来,解析器会以函数表达式的方式去调用定义函数。结果会正常的立即执行。
大多数情况下用!,因为比()节省一个字符。
(function test(){ console.log('test'); })();
或者用!、+、-也是同样的结果
!function test(){ console.log('test'); }();
2、函数表达式
var test = function(){ console.log('test'); }