JS学习笔记(一)基本数据类型
基本数据类型:String、Number、Null、Object、Boolean
typeof :检测给定变量的数据类型
可能返回的字符串:“undefined” 、“boolean”、“string”、“number”、“object”、“function”。
Null类型
var message;
typeof message; //定义但未初始化值返回"undefined"
typeof age; //未定义变量返回"undefined"
var car =null; //初始化为Null类型
typeof car; //返回"object"字符串
alert (null == undefined);
/*返回为true,因为undefined是派生于null值,因此在ECMA-262中规定他们的相等性测试返回为true*/
Boolean类型
var f=false;
var t=true;
//True与False不是Boolean类型,它们是标识符
/*
*虽Boolean类型字面上只有两个,但是ECMAScript中所有类型的值都有与这两个boolean值等价的值
*等价表详见下表
*/
五种数据类型与Boolean类型的互换
数据类型 | 转为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “” (空字符串) |
Number | 任何非零数字值 | 0和NaN(非数值Not a Number) |
Object | 任何对象 | null |
Undefined | n/a(不可用) | undefined |
Number类型
1.整数
var intNum = 55; //十进制的55
var intNum1 = 0721; //八进制的465,八进制以0开头,超出0~7数值界限默认以十进制读取
var intNum2 = 0xA; //十六进制的10,十六进制以0x开头
//在进行算术计算时所有八进制与十六进制最终都会被转换成十进制数值
2.浮点数
var floatNum1 = 1.1; //浮点数1.1
var floatNum2 = 10.0; //整数10,SCMAScript会不失时机地将浮点数值转化为整数
//浮点数的几种写法
var float1 = 1.1;
var float2 = 0.1;
var float3 = .2; //可以使用,但不推荐
var float4 = 3.14e3 //等于3140,科学计数法
3.数值范围
ECMAScript表示的最小数值保存在**Number.MIN_VALUE**,在大多数浏览器中其值为5e-324;
能够表示的最大数值保存在Number.MAX_VALUE,在大多数浏览器中其值为1.7976931348623157e+308;
如果得到一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值;
简单来说,就是如果这个数值是负数,则其转换成**-Infinity**(负无穷),如果为正数就为Infinity(正无穷);
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(result); //窗口显示Infinity(正无穷)
//可通过isFinite()函数判断结果是否为无穷数值,是返回false,不是则返回true
alert(isFinite(result)); //窗口警示"false"
4.NaN
NaN,即非数值(Not a Number)是一个特殊的数值,用于在表示一个本来要返回数值的操作数未返回数值的情况。
NaN有两个特点,一是涉及NaN的操作都会返回NaN(如NaN/10);二是NaN与所有值都不相等,包括它本身;
alert(NaN/10); //显示NaN
alert(NaN==NaN); //显示false
ECMAScript中定义了isNaN()函数,在接受一个任何参数后,判断是否“不是数值”,是,则返回true,不是则返回false;
alert(isNaN(NaN)); //显示true
alert(isNaN(10)); //显示false
alert(isNaN("10")); //显示false,该字符串可以转变为数值
alert(isNaN("blue")); //显示true,该字符串无法转为数值
alert(isNaN(true)); //显示false,Boolean值可以转换成数值1
5.数值转换
有3个数值函数可以把非数值转换成数值:Number()、parseInt()、parseInt();
Number()
可以用于任何数据类型转换成数值
数据类型 | 转换规则 |
---|---|
Boolean | ture和false分别转换成1和0 |
数字值 | 只是简单的传入及返回 |
null | 返回0 |
undefined | NaN |
字符串 | 见下 代码块 |
对象 | 调用对象valueOf()方法,再依照上述规则转换,如果转换的结果是NaN,则调用对象的toString()方法再依照上述规则进行转换 |
//1.如果字符串只包含数字(包括带正负号),则将其转换为十进制数值
Number("123"); //123
Number("01234"); //1234
//2.如果字符串包含有效的浮点格式,如"1.1",则将其转换成为对应的浮点数
Number("-1.1"); //-1.1
//3.如果包含有效的十六进制格式,则将其转换成相同大小的十进制整数值,不能有负号,否者返回NaN
Number("0xF1"); //241
//4.字符串为空串""
Number(""); //0
//5.除上述格式,都返回NaN
Number("-0xF1"); //NaN
Number("weqsq"); //NaN
parseInt()
专门负责将字符串转换成整数值,具体规则和Number ()转换字符串相同,但只转换整数。其更多的是进行模式匹配,匹配数字模式,不似Number复杂的数值转换,parseInt()转换整数更为便捷。
parseInt(""); //NaN
parseInt("123blue"); //123
parseInt("000222"); //222,省略0
parseInt(" -100"); //-100,省略空格
parseInt("\n222"); //222,省略换行符
parseInt("0xff"); //255,十六进制数转换成十进制数
parseInt("070"); //70或56,看浏览器支持ECMAScript 5还是支持ECMAScript 3,
parseInt("91.99"); //91
ECMAScript3中"070"被当成八进制字面量因此转换后为56,而ECMAScript5中parseInt()不具有八进制解析功能,所以转换后为70,所以为了消除异议,可以为该函数提供第二个参数(按什么进制数解析)。不加参数会由parseInt()函数选择解析基数,因此建议什么情况下都要加上第二参数。
parseInt("0x123",16); //291
parseInt("070",8); //56
parseInt("070",10); //70
parseInt("070",16); //112
parseInt("Af",16); //175
parseInt("Af"); //NaN
parseFloat()
跟parseInt()类似,都是专为字符串作转换的函数,不过parseFloat被用于转换浮点数值。
parseFloat(""); //NaN
parseFloat("1234blue"); //1234
parseFloat("0xA"); //0,解析基数都为十进制,无十六进制解析,也无第二参数
parseFloat("22.5"); //22.5
parseFloat("22.34.5"); //22.34,第一个小数点有效,第二个小数点无效
parseFloat("00908.54"); //908.54
parseFloat("3.1415e5"); //314150,科学计数法
String类型
String类型用于表示由零个或多个16位Unicode字符