javascript操作符和数据类型
一、数据类型
1.undefined类型
- undefined只有一个值就是undefined,在使用var声明但未对其加以初始化时,这个值就是undefined。
eg
使用typeof()时,返回值是undefined则证明该变量没有被声明
var message;
var age
alert(message);//"undefined"
typeof(age);//"undefined"
2.null类型
null也是只有一个值null,null表示空对象指针,使用typeof null 时返回值是object。
var call = null;
alert(typeof car);//"object"
如果定义的变量准备在将来用于保存对象,最好将该变量初始化为null。
3.布尔类型
- 此种类型只有两种值true和false
调用转型函数Boolean()。可以将一个值转化为对应的Boolean值。
eg
var message = "hello";
var myBoolean = Boolean(messaeg);
alert(myBoolean);//true
4.number类型
- 浮点数,整数,0,负数,NaN,
var floatNum = 1.1;
- 通过Number()函数,可以把其他类型数据转化为number类型
- 在使用Number()时,只要字符串中出现任何一个非有效数字字符时,结果都是NaN.
Number('12');//12
Number('12a');//NaN
Number(true);//1
Number(undefined);//NaN
Number(null);//0
- 把引用数据类型转化为number时,先调用toString()方法,在把字符串转化为number
Number([]);//0
Number([12]);//12
Number([12,23]);//NaN
Number({name:"zhu"});//NaN
parseInt()
- 可以用来提取整数
提取规则,从左向右,依次查找,直到遇到非有效数字为止。
parseInt('12px'); //12
parseInt('12px13'); //12
parseInt('px12'); //NaN
parseInt('12.5px'); //12
- 可以用来进行进制转换
parseInt( string , radix)
- string :必选,要被解析的字符串。
- radix :可选,该值是以几进制为基数,值介于2-36之间;如果省略或为0,则以10进制为基数;如果超过2-36,则返回值是NaN。
举个栗子
parseInt("10"); //省略第二参数,以十进制为基数,输出为10
parseInt("19",10); //10 10进制->10进制
parseInt("11",2); //3 2进制->10进制
parseInt("1f",16); //15+16 16进制->10进制
parseFloat()
- 在parseInt基础上可以识别小数点
举个栗子
parseFloat('12.5px'); //12.5
parseInt('12.5px'); //12
5.object类型
- 基本格式:var obj = {属性名:属性值 , 属性名:属性值 }
- 每个对象都是由0到多组属性名:属性值 (键值对)组成的,且属性名不能重复
var obj = { name : “wnag” , age : 18 };
- 获取某个属性对应的属性值有两种方法
- obj.name
- obj[ ‘name’ ] //不能忽略引号
如果属性名是数字,则直接obj[数字] 或者 obj[‘数字’]
如果操作的属性名不存在,则返回的结果是undefined
- obj[age] 和 obj[‘age’] 的区别
我们先看一个栗子:
var age = 'name';
var obj = {name : "zhufeng", age : 18};
obj.sex = "man";//设置新的属性,此时的obj中有了sex属性
obj['age'] = 20; //修改属性值
console.log(obj[age]);//输出结果是'zhufeng',obj[age] => obj['name'] => 'zhufeng'
console.log(obj['age']);//输出结果是20,age被修改了
age : 变量名,代表的是他存储的值
‘age’ : 常量,字符串中的具体值
6.函数数据类型
- 基本格式:function 函数名 () { 函数体 }
- 函数是具备一定功能的方法,按照引用地址的方法来操作,之后会讲到
function fn () {
console.log(1+1);
}
fn; //只是输出函数本身
fn();//执行函数,实现函数的功能,打印 2
- 实参与形参
1.形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。
2.实参是在调用时传递给函数的参数,即传递给被调用函数的值。
3.函数调用中发生的数据传送是单向的,即只能把实参的值传给形参,而不能把形参的值传给实参。因此,在函数调用的过程中,形参的值可以改变,而实参的值则不会变化
function fn (n1,n2){ //此时n1,n2都是形参
console.log(n1+n2); //输出为30
}
fn(10,20);//此时10,20都是实参
二、操作符
1.一元操作符
递增递减操作符(++ ,–)
var age = 23;
++age;//此时age的值变成了24,同时++age等价于age = age + 1;
–age;//age = 22,
var num1 = 2;
var num2 = 20;
var num3 = num1-- +num2;//结果是22,num1–是先赋值在递减,此时的num1=1;
var num4= num + num2;//结果是21
- 一元加和减操作符(+,-)
- 一元加或减操作符放在数值前面
var num = 24;
num = +num; //结果依旧是24
num = -num; //-24
若对非数值应用时,该操作符会像Number()函数一样进行转换
var s1 = “01”;
var s2 = “1.2”;
var s3 = “qq”;
var s4 = false;
s1 = +s1; //1
s2 = +s2; //1.2
s3 = +s3; //NaN
s4 = +s4; //0
s1 = -s1; //-1
s2 = -s2; //-1.2
s3 = -s3; // -NaN
s4 = -s4; //0
2.位操作符
左移<< 、无符号右移>>> 、 有符号右移>>
- << : 将数值的所有位向左移动指定的位数
var a = 2; //等于2进制的10
var b = a << 5; //等于2进制的1000000,原始值向左移动5,其余位用0补齐
- 无符号右移:会将数值的所有32位都向右移
对正数来说无符号右移与有符号右移相同
var old = 64; //等于二进制的1000000
var new = old >>> 5; //等于二进制的10
- 有符号右移:将数值向右移动,但保留符号位
var old = 64; //等于二进制的1000000
var new = old >>> 5; //等于二进制的10
3.布尔操作符
逻辑非 !、逻辑与 && 、逻辑或 ||
- 逻辑与:
var result = true && false ;
逻辑与属于短路操作,一假则假,如果第一的操作数是false,则值不会是true
- 逻辑或:
var result = true || false ;
逻辑或也是短路操作符,一真则真,若第一个操作数为真,就不会看第二个的值
- 逻辑非:
首先会将他的操作符转化为一个布尔值,然后在对其求反
布尔值中只有false 、undefined、null、NaN、" " 的值是false
alert( ! “blue” ); //false
alert( ! false); //true
4.+、-、*、/、<、>、== 、===
加减乘除,与数学中的用法相同。
比较运算符返回的将是布尔类型的值。
var num = 20;
var num1 = 2;
num > num1;//true
==
判断两个操作数值是否相等 ,在比较之前,会进行类型转化。
null == undefined //true
NaN ==NaN //false
1 == “1” //true
===
判断两个操作数是否相等,包括类型也要相同
“55” === 55 //false
5.条件运算符
var a = (num1>num2) ? num1 : num2
如果num1>num2 成立则执行num1,若不成立则执行num2。
6.逗号运算符
使用逗号运算符可以在一条语句中执行多个操作
var num1 = 1,
num2 = 2,
num3 = 3;
逗号运算符还可以进行赋值。逗号操作符总会返回表达式中的最后一项
举个栗子
var num = {2,4,6,7,8};//num的值为8
在下次将介绍各种语句