一.变量
- javascript是一种弱类型脚本语言。
- 变量的声明使用var,由数值决定数据类型。
- 变量的命名规则
(1)变量名必须以字母或者是下标符号“_”或者是“$”开头,数字不能开头。
(2)变量名长度不能超过255个字符
(3)变量名称中不能有空格
(4)不能使用脚本语言中的保留字和关键字作为变量名
(5)变量名称严格区分大小写
-全局变量
在方法外部声明的变量
方法内部没有加var关键字声明的变量
-局部变量
方法内部使用var声明的
全局变量和局部变量的示例代码
var a = 3;//全局变量
function test(){
b = 3;//全局变量
alert(a);
}
alert(b);
这段代码会报错,b weil定义,原因是因为javascript代码执行顺序和声明提前导致的,a是全局变量,但是alert(a)在函数体里 面执行的,只有函数被调用时函数体里面的变量才会声明提前,函数体才会执行,所以程序要正常执行需要在alert(b);之前调用test()。
var a = 3;//全局变量
function test(){
var b = 3;//局部变量
alert(a);
alert(b);
}
test();//调用完弹出3在弹出3
alert(b);//报错b is not defined,局部变量全局不能访问到只有在局部才能访问到
二.变量类型
变量的数据类型分两大类基本数据类型和应用数据类型
1.基本数据类型如下:
(1)number类型(整数,小数,NaN,Infinity,-Infinity)
//以下的类型都是Number
var a1 = 10;
console.log(a1);//10
var a2 = 10.5;
console.log(a2);//10.5这里需要注意浮点型最高精度是17位不要小数相加的方式做判断
var a3 = NaN;//not a number
console.log(a3);//NaN
var a4 = 1/0;
console.log(a4);//Infinity
var a5 = -(1/0);
console.log(a5);//-Infinity
var a6 = parseInt("abc");
alert(a6);//NaN
var a7 = parseInt("123abc");
alert(a7);//123类型是number
var a8 = parseInt("a123abc");
alert(a8);//NaN
(2)undefined //值就是undefined,变量声明了未赋值
var b;
console.log(b);//undefined
var b;
alert(b);//undefined
(3)null //代表对象的引用为空
var b2 = null;
alert(b2);//null
(4)string //字符串类型加单引号或者单引号的
var string1 = "1124";
var wtring2 = "qwe123";
(5)boolean //布尔类型,值是true或false
var a = true;
var b = fasle;
2.引用数据类型(数组 函数 对象)
var array = [1,2,3];//数组
var data = new Data();//日期对象
var obj = {}//空对象,字面量的方式定义对象
funcetion a (){
}//函数
typeof操作符用来判断数据类型
typeof只能判断基本数据类型(基本数据类型里面的null 是object)引用数据类型只能判断出来函数。
var a = 10;//typeof(a);number
var b = 10.5;//typeof(b);number
var c = "nnnn";//typeof(c);string
var d = null;//typeof(d);object
var e = undefined;//typeof(e);undefined
var f = false;//typeof(f);boolean
var g = {};//typeof(g);object
var h = [1,2,3,4];//typeof(h);objec
var j = function(){};//typeof(j);function
三.操作符
ECMA标准也定义了很多操作符,主要分以下几种:
[1]一元操作符
只能操作一个值的操作符叫做一元操作符,是ECMAScript中做简单的操作符。
1.递增和递减操作符(分前置和后置型)
前置递增操作符:
var age = 29;
++age;
alert(age);//30
执行前置递增与下面的代码执行效果相同
var age = 29;
age = age+1;
alert(age);//30
前置递减操作符:
var age = 29;
--age;
alert(age);//28
执行前置递增或递减操作时,变量的值都在语句被求值之前改变的。
var age = 29;
var anotherAge = --age+2;
alert(age);//28
alert(anotherAge);//30
后置递增和递减与前置的有一个非常重要的区别:变量的值都在语句被求值之后改变的。再某些情况下不是问题,如:
var age = 29;
age++;
alert(agg);//30
当语句中包含其他操作时上述区别就非常明显了,如下
var num1 = 2;
var num2 = 20;
var num3 = num1-- +num2;
alert(num3 );//22
var num4 = num1+num2;//21
递增和递减操作符还适用于除了整数以外的值,如字符串,布尔值浮点值和对象,试用不同的值时遵循下列规则:
(1)在包含有效数字字符串的时候,先将其转换为数字值,在执行+1的操作字符串变量变成数值变量如下:‘
var s = "2";
var s1 = s++;
alert(s);//3
alert(s1);//2
(2)在不包含有效数字字符串的时候,将转换为NaN,字符串变量变成数值变量。如下:
var s2 = "afh123";
var s3 = s2++;
alert(s3);//NaN
(3)在应用于布尔值false时,先将其转换成0,在做加1减1操作。布尔值变量变成数值变量。如下:
var b = false;
b++;//值变成1
(4)在应用于布尔值true时,先将其转换成1,在做加1减1操作。布尔值变量变成数值变量。
(5)在应用于浮点数时,执行加减1操作。
var f = 1.1;
f--;//值变成0.10000000000000009
(6)应用于一个对象时,先调用对象的valueof()方法,已取得一个可操作的值。还厚对该值应用前述规则,如结果是NaN,则在调用toString(),在应用前述规则。对象变量变成数值变量。
var o = {
valueOf:function(){
return -1;
}
}
o--;//值变成-2
2.一元加和减操作符
主要应用于基本的算数运算,也可以用于转换数据类型。
var age = 25;
age = +age;//25
age = -age;//-25
[2]位操作符
不常用
[3]布尔操作符(逻辑! 逻辑&& 逻辑||)
布尔操作符堪比相等操作符,如果灭有测试两个值关系的能力那么if(){}else{}就无用了。
(1)逻辑非(!)
操作数是一个对象返回false
操作数是一个空的字符串返回true
操作数是非空字符串返回false
操作数是0返回true
操作数是任意非0数值,返回false
操作数是null返回true
操作数是NaN返回true
操作数是undefined返回true
(2)逻辑与(&&,有两个操作数)
针对两个布尔值使用时,只要有一个值是false都会返回false,还可以应用于其他类型的操作数。
&&具有短路操作,如第一个操作数是false就不会计算第二个操作数,如第一个操作数是true会继续计算第二个操作数,注意返回的是操作数。
(2)逻辑或(||,有两个操作数两个操作数都是布尔值时,第一个操作数求值结果是true就返回true,不需要对第二个操作数求值(短路操作)。例如:
var Myobject = a || b;//当a值无效时,b赋值给这个对象
[4]乘性操作符(3个乘性操作符乘法除法和求模)
操作数为非数字的情况下会执行自动的类型转换空字符串被当做0,布尔值true当作1。
乘法(*)
(1)如一个操作数是NaN,结果是NaN。
"123d"*1//NaN
(2)Infinity与0相乘,结果是NaN
Number.MAX_VALUE*2*0
(3)如果Infinity与非0的数相乘,结果是Infin
ity或者是-Infinity。
Number.MAX_VALUE*2*-3//-Infinity
Infinity
(4)如果Infinity与Infinity相乘,结果是Infinity,这个是必然的
(5)如果有一个不是数字,后台会调用Number()将其转换为数值,然后在应用上面的规则
"150"*2//300
(6)如操作数都是数值,执行常规的乘法计算,不管乘积是整数还是负数,超出ECMAScript数值的表示范围,就会返回Infinity或-Infinity。可以想通是必然的。
除法(/)与乘法操作符规则相同。
(1)如一个操作数是NaN,结果是NaN。
"1234c"/1 //NaN
1/"1234c" //NaN
(2)如果Infinity除以Infinity,结果是NaN
Number.MAX_VALUE*1.5/(Number.MAX_VALUE*1.5) //NaN
(3)如果是0/0结果是NaN
(4)如果是非0的有限数被0除,结果是Infinity或-Infinity
256667/0 //Infinity
Infinity
(5)如果Infinity被非0数值除,则结果是Infinity或-Infinity
Number.MAX_VALUE*2/1
(6)如操作数都是数值,执行常规的除法计算,不管商是整数还是负数,超出ECMAScript数值的表示范围,就会返回Infinity或-Infinity。
(7)如果有一个不是数字,后台会调用Number()将其转换为数值,然后在应用上面的规则
求模(余数)(%)
var result = 26%5;//1
(1)如操作数都是数值,执行常规的除法计算,返回除得的余数
(2)被除数是无穷大值,除数是有限大的数值,则结果是NaN
(3)如被除数是有限大,除数是0,结果是NaN
123%0 //NaN
(4)如果Infinity除以Infinity,结果是NaN
(5)如被除数是0,结果是0
0%100 //0
(6)被除数是有限大,除数是无穷大,结果是结果是被除数
133%(Number.MAX_VALUE*2)
//133
(7)如果有一个不是数字,后台会调用Number()将其转换为数值,然后在应用上面的规则
[5]加性操作符(加法和减法)
加法(+)
如果两个操作数都是数值,执行常规的加法运算,然后根据下列规则返回结果。
(1)如果一个操作数是NaN,结果就是NaN
(2)如果是Infinity加Infinity,结果是Infinity
(3)如果是-Infinity加-Infinity,结果是-Infinity
(4)如果是-Infinity加Infinity,结果是NaN
(5)如果是+0加+0,结果是+0
(6)如果是-0加-0,结果是-0
(7)如果是+0加-0结果是0
减法(-)遵循下面的规则
(1)如果两个操作数都是数值,执行常规的减法运算,并返回结果。
(2)如果一个操作数是NaN,结果就是NaN
"234a"-1 //NaN
(3)如果是Infinity减Infinity,结果是NaN
(4)如果是-Infinity减-Infinity,结果是NaN
(5)如果是-Infinity减Infinity,结果是-Infinity
(6)如果是Infinity减-Infinity,结果是Infinity
(7)如果是+0减+0结果是0
(8)如果是-0减+0结果是-0
(9)如果是-0减-0结果是+0
(11)如果有一个是字符串布尔值null 或undefined,后台会调用Number()将其转换为数值,然后在应用上面的规则执行减法计算,如果转换的值是NaN,则减法的结果就是NaN
(12)如果一个操作数是对象,调用对象的valueof()方法,已取得一个可操作的值。如对象没有valueOf(),则在调用toString(),并将得到的字符串转换为数字。
[6]关系操作符(大于(>) 小于(<) 大于等于(>=) 小于等于(<=))
返回布尔值,当操作数使用了数值时也要进行数据转换
(1)两个操作数都是数值,则执行数值比较
3>2 //true
(2)都是字符串,比较字符串对应的字符编码值
"Brick"<"alphabet" //true 大写字母的字符编码小于小写字母的字符编码
"23"<"3" //true比较的还是字符编码
(3)如果一个操作数是数值,将另外一个操作数转换为一个数值,然后进行数值比较。
"23"< 3 //fasle字符串23转换为数值23在与3进行比较
"aa1"<3 //false "aa1"被转换成NaN怎么比较都是false
(4)如果一个操作数是对象,调用对象的valueof()方法,。如对象没有valueOf(),则在调用toString(),并将得到的结果跟前面的规则比较。
(5)如果一个操作数是布尔值,先将其转换为数值,然后在执行比较。
true<2 //true
true< "2" //true
[7]相等操作符(相等和不相等(==),全等和不全等(===))
(1)如一个操作数是布尔值,则在比较相等性之前将其转换成数值-false转成0,true转成1
(2)一个操作数是字符串,另外一个操作数是数值,比较之前将字符串转成数值
"123"==123//true
(3)如果一个操作数是对象,调用对象的valueof()方法,用得到的基本类型按照前面的规则进行比较。
(4)null和undefined是相等的
(5)要比较相等性之前不能讲null和undefined转换成其他任意值
(6)如果一个操作数是NaN,则相等操作符返回false,不相等操作符返回true。
(7)如果两个操作数都是NaN,相等操作符返回false,NaN不等于NaN。
(8)如果两个操作数都是对象,则比较是不是同一个对象,两个操作数都指向同一个对象返回true,否则返回false。
全等和不全等(=== !==)
数值和类型都相等才返回true
"55" ===55//false
null===undefined//false
[8]条件操作符(三元运算符)
var max = (num1>num2)?num1:num2
[9]赋值操作符(=)
作用就是把右侧的值赋值给左侧的变量。
var num = 10;
num += 10;
符合赋值操作符
乘/赋值(*=)
除/赋值(/=)
模/赋值(%=)
加/赋值(+=)
减/赋值(-=)
左移/赋值(<<=)
有符号右移/赋值(>>=)
无符号右移/赋值(>>>=)
[10]逗号操作符
var num=1,num1=2,num2=3;
var num=(1,2,3,4,0);//num值是0