代码改变世界

第三章--数据类型

2016-04-18 10:07  看完  阅读(309)  评论(0)    收藏  举报

3.4--数据类型

数据类型分为 boolean , string, object , function , number,undefinde

 

3.4.1--typeof 操作符

typeof 操作符在safari5,chrome7以及之前版本 会将正则表达式 返回为"function",而在其他浏览器会返回"object"

console.log(typeof null);

var message = "some string";
console.log(typeof message);
console.log(typeof 95);

3.4.2--undefined类型

var message_2;
console.log(message_2);
console.log(message_2 == undefined); //true

var message = undefined;
console.log(message);  //true

3.4.3--null类型

从逻辑角度讲,null是一个空对象指针,而这正是null类型为"object"的原因了

var car = null;
console.log(typeof car); //object

实际上undefined值是派生于null值的,所以在ECMA-262相等测试返回true

console.log(null == undefined); //true

3.4.4--boolean值

var message_4 = "hellow world";
console.log(Boolean(message_4)); //true

任何非空字符串的boolean值为true , ""(字符串)为false
任何非零数字值的boolean值为true , 0和NaN(not a number)为false
任何oject对象的boolean值为true , null为false
任何n/a的undefined的boolean值为true , undefined 为false

3.4.5--Number类型

number 支持 八进制 和 十六进制的表示,所有八进制和十六进制表示的数值最终会转成十进制的数值表示

var intnum = 55; // 整数55
var octalnum = 070; //解析结果八进制的56
var octalnum_1 = 079; // 无效的八进制--解析为79
var hexNum = 0xA; //解析为十六进制的10
var hexNum_1 = 0x1f; //解析为十六进制的31

1.浮点数值


基于IEEE754格式来计算

var floatNum = 1.1;

var floatNum_1 = .1 //有效,但不推荐

var floatNum1 = 10.0 //由于保存浮点数的内存是整数的两倍,所以ECMA会尽量把浮点数转换成整数

var floatNum_2 = 3.125e3; //表示3.125 * 10的3次方
var floatNum_3 = 3e-5; // 表示3*10的-5次方

var floatNum_4 = 0.1 + 0.2; //结果为0.30000000000000004    浮点数计算准度不如整数

2.数值范围

 

Number.MIN_VALUE  表示最小值5e-324
Number.MAX_VALUE  表示最大值1.7976931348623157e+308
超过以上两个数值会转换成 Infinity 和 –Infinity

 

 

3.NaN--not a number

isNaN(10); //false
isNaN("blue") // true
isNaN(NaN) //true
isNaN(true) // false 可以转换成1

 

4.数值转换

var num1 = parseInt("123blue"); //  结果为123
var num2 = parseInt(""); //    NaN
var num3 = parseInt(0x1f); //31
var num4 = parseInt("AF", 16) // 表示AF的十六进制,第二个参数为几进制
var num5 = parseInt("AF") // NaN
var num6 = parseInt("10", 2) //2(10的二进制解析)
var num7 = parseInt("10", 8) // 8 (10的八进制解析)
var num8 = parseFloat("0908.5") // 908.5会忽略前面的零
console.log(num8)

 

3.4.6—String

用string()方法可以把一个值转换为字符串

var value =11;
console.log(String(value)) //"11"

 

3.5操作符

有递增操作符++ ,递减操作符--

var age = 29;
age++//30
var age_2 = --age; //递减操作符要放在前面
console.log(age_2)

3.5.3--boolean操作符

!为逻辑非操作符(取相反值)

&&为逻辑与操作符(并且的意思),两个为true才可以为true,有一个false都不行

||为逻辑或操作符(或者的意思),有一个为true就可以。

 

3.5.5--加法操作符

 

字符串加数字,ECMAscript会将数字转换成字符串进行并接

如果想将计算结果加入字符串,就把数值执行加(),先执行求值再并接。

var result = (5) + "5";
var num1 = 10;
var num2 = 20;
var num3 = "The result is " + (num1 + num2)
console.log()

 

3.5.6--关系操作符

// 如果比较两个值为数值的话,就按照正常大小比较
var result = 1 > 2; //false
// 如果两个值为字符串的话,就按照字符串编码值比较
var result_2 = "Brick" < "alphate"; // true
var result_3 = "23" > "3";
false
// 如果一个值为数值,一个值为字符串,则转字符串为数值作为比较,如果转不了数值就转为NaN
var result_4 = 23 > "3"; //true
var result_5 = 23 > "a"; //false
//如果数值和Boolean值进行比较就降Boolean值转为数值进行比较
var result_6 = 23 > false; //true
//如果数值和Object进行比较,就把Object用ValueOf()方法或者用toString()方法转换进行比较
var result_7 = 23 > null; //true
//相等== 和 全等=== ,相等是把两个操作数转换再比较,全等是两个操作数不转换来比较
//任何操作数和NaN比较都返回false
var result_8 = ("23" == 23); //true
var result_12 = (55 === "55"); //false
var result_9 = (null == undefined); //true
var result_10 = (null === undefined); //false
var result_11 = (NaN == NaN); // false
var result_13 = (NaN == 1); //false

3.5.10--都好操作符


可以一次声明多个变量。 用于赋值时,逗号操作符会返回最后一项

var num1 = 1 , num2 =2 ,num3 =3;
var num=(1,2,3,4,5); // 5