JS 学习笔记--3--数据类型

1、typeof 操作符 用来获取变量或者字面量的类型,也可以typeof(x);但是typeof并非内置函 数,而是一个操作符变量
2、JS 一共6种类型 Undefined/Null/Boolean/Number/String/Object此六种类型
3、用typeof x;获取x变量或者字面量的类型返回的是上面6种类型的所有小写,并且Null类型的 变量返回的也是object

4、Unfined 类型:
 就是在变量声明了但是没有赋初始值的元素var box;alert(typeof box);//unfined
 alert(typeof age);age没有定义,但是同样会返回unfined,但是age逻辑上是不存在的
5、Null 类型:
 Null类型的变量时要显示的赋值为null的(var box = null;)他表示一个空的对象引用,typeof box;返回的是object,可以用次类型来判断一个变量是否已经存在,如果变量被重新赋值则 box!=null 返回的是真;box 是一个空对象;而 var box={};是空的对象;
  Undefined 是派生自 null 的,如果用 == 做相等性检查会返回为真  因为他们检查的其实是 值,但是逻辑上并不想等 用 typeof 来比较或者用恒等符 === 来比较,因为类型不一样
5、Boolean 类型:
 Boolean 类型只有两个值 true 和 false;True 和 False 都不是Boolean类型的值,任 何类型的变量都能够隐试转换为 Boolean类型,
 
6、Number 类型: 包括两种类型数据 整形 和 浮点型
  基本上数值字面量是十进制,也有八进制和十六进制,八进制必须以0开头,后面的数值必 须 是0到7之间的数,否则系统会自动去掉前导数值0,转换为十进制数据;十六进制数据必须 以0x开头,后面是0~9和A~F;
  浮点型数据中数值必须包含一个小数点,并且小数点后面至少要一位数字,而且由于浮点数内存 比整数要大两倍,故系统会自动的将能够转换成整形的浮点数转换成整形(1、小数点后面 没有数值,2、小数点后面全部为0)。
  过大或者过小的数据可以采用科学计数法表示数据1.2e3;1.2e-3分别表示1200和0.0012;
  浮点数最高可以表示17位,但是算术运算中可能不会精确,故做判断的时候一定要考虑此问题,  比如0.1+0.2;返回的是 0.300000000000000004
  可以用 Number.MAX_VALUE 和 Number.MIN_VALUE 获得浮点数表示的最大和最小值
  如果超出了浮点数的范围会返回 Infinity (正无穷)和 -Infinity (负无穷),也可以用 Number.POSITIVE_INFINITY 和 Number.NEGATIVE_INFINITY 来获得正负无穷大 Infinity 和 -Infinity
  要想判断某一个数是否超过了一个数是否超过了最大最小值范围 可以用 isFinite(x)函数
7、NaN : Not a Number是指那些本该返回一个number类型的值但是并不能够返回一个值

8、三种转换函数,可以讲其他类型的数据转换成 Number 类型的数据:  Number(),parseInt(),parseFloat()

Number() 可以将任意类型的数据转换成 Number 数据类型,   boolean中的true转换为1,false 转换为 0;null 对象转换成 0;数值型直接返回  unfined返回的是 NaN

如果是字符串,转换的规则包含以下:  

  1)、只是包含数值的字符串,会直接转换成十进制数值如果包含前导 0 即自动去掉

  2)、如果只是包含浮点数的字符串,会直接转换成浮点数,如果包含前导和后导0会自动去掉  

  3)、如果是空字符串,直接转换成 0: Number('');//0  

  4)、如果不是以上三种类型 那么返回的是 NaN  

如果是对象,首先会调用 valueOf()方法,然后确定返回值是否能够转换成数值,如果转换结果 是NaN,则基于这个返回值再调用 toString() 方法,再测试返回值

1 var box={
2     toString:function(){
3         return '123'    //可以改为 字符串 'abc' 测试结果
4     }
5 };
6 alert(Number(box));//123    
View Code

parseInt():  转换的时候先看第一位是否是数值,如果是就一直返回直到连续的数值结束为止。

parseInt('12bca');//12   parseInt('hh23k');//NaN    parseInt('12.45');//12   parseInt('');//NaN 

parseInt() 也可以识别八进制和十六进制:

  需要传递第二个参数 8,10,2,16中的一个,第二个参数代表的是前面带转换的数值的以什么进制来读取;

  如果待转换的数据前面包含0x 则可以不传递第二位参数也OK   

parseFloat() 用于转换成浮点数,和parseInt()一样从第一位开始解析,但是不认识十六进制同时只是认识一个小数点  

8、String 类型:  String类型就是由0到多个由16位Unincode编码组成的类型  即字符串,可以有单双引号成对出现来表示 任何类型的数据都可以转换成String类型,用 x.toString(),但是如果是 null 和 undefined 则需要用 String(x)方法来进行转换。如果待转换的字符串全是由数值组成则 toString() 可以传递一个参数,2,8,16,10 但是转换后的值是带有引号的值,  

9、Object 类型: 采用new Object();的方式创建,可以传递参数,并且参数可以参与计算

10、下面这是练习中的源代码(EditPlus 3 编写),代码中注释很详细  运行时可以采用块注释(/* */)方法来慢慢查看效果

  1 //alert("数据类型的练习");
  2 /*-------------   数据类型   -------------*/
  3 var box="abc";
  4 alert(typeof box);// box 类型是 String; 值是 "abc";  类型的返回值是 string
  5 alert(typeof(box));//typeof 是操作符  不是函数
  6 
  7 var box=100;
  8 alert(typeof box);//box 类型是Number; 值是 100; 类型的返回值是 number
  9 
 10 var box=true;
 11 alert(typeof box);//box 类型是Boolean;  值是true; 类型的返回值是 boolean
 12 
 13 var box;
 14 alert(typeof box);//类型是 Undefined; 值是唯一的 undefined;类型返回值是undefined
 15 
 16 var age=null;
 17 alert(typeof age);//age 类型是Null,Null类型继承自Object类型,值为null 类型的返回值为object
 18 
 19 var box={2:3,5:3};
 20 var age=[2,5,7];
 21 alert(typeof box);
 22 alert(typeof age);//类型都是 Object; 返回的类型的值都是 object
 23 
 24 function Get(){
 25  alert("get函数!");
 26 }
 27 alert(Get);          //返回的是函数的实体
 28 alert(typeof Get);//typeof 操作符也可以对函数进行判断 返回为function,表名是一个函数
 29 
 30 
 31 /*------------- Undefined 类型 -------------*/
 32 //Undefined 类型只有一个特殊的值undefined:在用var声明变量的时候没有对其进行初始化
 33 // 声明变量的时候没有必要进行赋值为undefined 因为系统会进行一个隐士的转换
 34 
 35  //下面两个的类型返回值都是 undefined;但是逻辑上他们的值一个是undefined,一个报错
 36 //古在定义变量的时候尽可能的不要只声明 不赋值
 37 var box;
 38 alert(typeof box);
 39 alert(typeof age);//age is not defined
 40 
 41 
 42 /*------------ Null 类型  ------------*/
 43  //Null 类型是一个只有一个值的数据类型,特殊值null,表示一个空对象引用,typeof 时会返回 object
 44  var box =null;
 45  alert(typeof box);
 46 
 47 // 如果此处定义一个变量时为了将来保存数据最好定义成 Null 类型的
 48   var box=null;
 49   box="abc";
 50   if(box!=null)
 51   {
 52         alert("对象已经存在");
 53   }
 54 
 55 //  undefined 是派生自 null 的,故想等性检查的时候返回为true
 56 //  但是 并不是恒等(===) 恒等要求类型相等  故下面返回为两个false
 57 //  故未初始化的变量和赋值为null的变量会相等,但是可以采用typeof或者恒等比较出他们呢并不想等
 58     alert(undefined == null);//true
 59     alert(undefined === null);//false
 60     alert(typeof undefined == typeof null);//false
 61     var box;
 62     var age=null;
 63     alert(box==age);//true
 64     alert(typeof box==typeof age);//false
 65     alert(box === age);//false
 66 
 67 
 68 
 69 /*-------------- Boolean ------------*/
 70 //    Boolean 只有两个值 true,false 由于区分大小写 故True False 都不是Boolean的值
 71 //    任何类型都都有对应的值准换成boolean的值
 72 //    显示转换:
 73     var hello="hello word";
 74     var hello2 = Boolean(hello);
 75     alert(typeof hello);//string
 76     alert(typeof hello2);//boolean
 77     alert(hello2);//true
 78 //    隐式转换:String类型当字符串为空转换为false,
 79 //              Number非0数转换成true,包括无穷大,0和NaN转换成false
 80 //              Object类型  任何对象转换都为 true,除了 null;
 81 //              Undefined 类型只有一种值 转换后始终为 false
 82         var box="strings";
 83         if(box)//box 不为空  隐试转换为true
 84         {
 85             alert('真');
 86         }else{
 87             alert('假');
 88         }
 89         var box2='';
 90         if(box2)//box2 为空  隐试转换为false
 91         {
 92             alert('真');
 93         }else{
 94             alert('假');
 95         }
 96 
 97         var num=0;
 98         if(num)//num 为0  隐试转换为false
 99         {
100             alert('真');
101         }else{
102             alert('假');
103         }
104         var num2=NaN;
105         if(num2)//num 为N2N  隐试转换为false
106         {
107             alert('真');
108         }else{
109             alert('假');
110         }
111 
112 /*-----------   空对象和空的对象   -----------*/
113 
114 //空的对象 表示声明了  但是还未初始化
115 var box={};//box 的类型是Object;值是 object Object;类型返回值是object
116 alert(box);//object        
117 alert(typeof box);//object Object
118 //空对象  表示没有创建 就是一个null值
119 var age=null;
120 alert(age);//null
121 alert(typeof age);//object
122 
123 //这个表示,你还没有创建对象,但先声明了对象引用而必须初始化的结果
124 //你还没有来得及创建对象,先声明一个对象的变量放在那边,默认初始化为null
125 var heighe=null;
126 //在不知道存放什么值的时候 字符串默认声明成空字符串  Number为0,Boolean为false或者true都可
127  var str='';//表示为空的对象
128 if(str!=null){
129     alert('不为空');
130 }else{
131     alert('为空');
132 }
typeof;Undefined; Null;Boolean
  1 /*----------  Number 类型  -------------*/
  2 var box=250;    //十进制数据
  3 alert(box);//250
  4 //八进制数据必须以0开头  并且后面每一位数不能够比7大,如果大于7会自动去掉前导0,处理为十进制数据
  5 var box=065;    //八进制数据
  6 alert(box);//53        //十进制输出
  7 var age=078;    //十进制数据
  8 alert(age);//78
  9 //十六进制数据必须以 0x 开头   后面包含 0~9,a~f(可以大小写)
 10 var box=0x1f;    //十六进制
 11 alert(box);//31 //十进制输出
 12 var box =0x1A;
 13 alert(box);
 14 
 15 //浮点数 必须包含小数点 并且必须包含以为小数
 16 var box=3.8;
 17 alert(box);
 18 //var age=03.8; //error  浮点数不能够包含前导 0
 19 //alert(age);
 20 var height=.8;    //JS支持这中写法  但是最好不要这样写
 21 alert(height);//0.8
 22 
 23 //由于浮点数保存要比整数占的内存大一倍左右  故ECMAScript会自动将可以转换成整形数据的浮点数转换成整数
 24 var num1=8.;
 25 alert(num1);//8        //小数点后面没有数据  自动转换成8
 26 var num2=12.0;
 27 alert(num2);//12    //小数点后面为 0 自动转换成整形数据
 28 //对于过大或者过小的数据采用科学计数法表示  e后面的数代表的是10的多少次方
 29 var box=12.3e5;
 30 alert(box);//1230000
 31 var age=12.3e-5;
 32 alert(age);//0.000123
 33 //虽然浮点数最大可以保存17位小数,但是算术运算中可能会不精确,
 34 //故在做判断的时候一定要考虑次问题,特别是整形判断
 35 alert(0.3+0.4);//0.7
 36 alert(0.1+0.2);//0.30000000000000004;
 37 
 38 //浮点数的范围的最大值或者是最小值
 39 alert(Number.MIN_VALUE);//5E-324  //必须将后面的写为大写
 40 alert(Number.MAX_VALUE);
 41 //超过其范围就会显示为 Infinity  和  -Infinity
 42 alert(100e100);//1e102;
 43 alert(100e1000);//Infinity
 44 alert(-100e1000);// -Infinity
 45 
 46 //通过  Number.POSITIVE_INFINITY 和 Number.NEGATIVE_INFINITY 得到正负无穷大
 47 alert(Number.POSITIVE_INFINITY);//Infinity
 48 alert(Number.NEGATIVE_INFINITY);// -Infinity
 49 
 50 //通过 函数 isFinite(num) 判断一个数 num 是否是超过了范围 是返回true
 51 alert(isFinite(100e1000));//false
 52 alert(isFinite(100e100));//true
 53 
 54 // NaN 即非数字(Not a Number),是指本来要返回一个数值的  但是却没有返回一个数值
 55 // 于是就返回一个 NaN,这样就不会报错  在其他高级语言中是会报错的
 56 // 在其他语言中 除数是不能够为 0的,但是ECMAScript中则可以为0 可以看出JS是一种弱语言
 57 alert(5/0);//Infinity;
 58 alert(2/0);//Infinity;
 59 alert(0/0);//NaN
 60 alert(5/0*0);//NaN
 61 //可以通过Number.NaN操作来得到一个 NaN 数字 NaN与任何数据计算都是NaN 并且NaN 不与任何数据相等 包括本身
 62 alert(Number.NaN);//NaN
 63 alert(Number.NaN+4);//NaN
 64 alert(Number.NaN == Number.NaN);//false
 65 alert(0/0+5);//NaN
 66 alert(NaN == NaN);//false
 67 //可以通过函数 isNaN() 函数来判断一个数是否是NaN
 68 alert(isNaN(0/0));//true
 69 alert(isNaN(2/0));//false
 70 alert(isNaN(5/0*0));//true
 71 alert(isNaN("Lee"));//true        全字符的字符串不能够转换成数字
 72 alert(isNaN('25'));//false        '25' 先转换成数值 25 故不是NaN
 73 alert(isNaN('25Lee'));//true    含有字符的字符串不能够成功转换成数字
 74 alert(isNaN(true));//false        true能够转换成数字1
 75 //isNaN() 函数也适用与对象  在调用isNaN() 函数的过程中会首先调用 valueOf()
 76     //方法,确定返回值能否转换成数值对象  如果不能够就基于这个返回值再调用 toString()方法
 77 var box={};//true
 78 alert(isNaN(box));
 79 var age={
 80     toString:function(){
 81         return '123';
 82     }
 83 }
 84 alert(isNaN(age));//false
 85 alert(age);//123
 86 
 87 
 88 /* ---- 三个数值转换函数 Number(),parseInt(),parseFloat(),----    */
 89     //Number()是转型函数可以把任何类型转换成Number类型,但是另外两个只能够转换字符串
 90 alert(Number(true));//1
 91 alert(Number(25));//25    数值类型的数据直接返回
 92 alert(Number(null));// 0
 93 alert(Number(undefined));//NaN undefined类型转换以后返回的是NaN
 94 
 95 // ---------     如果是只包含字符串则遵循以下规则
 96 //1、如果是数值型的字符串,则会直接转换成十进制数据  同时去掉前导0
 97     alert(Number('0234'));//234
 98 //2、只是包含浮点数值的字符串 会自动将字符串转换成浮点数 并且去掉前导和后导0
 99     alert(Number('06.80'));//6.8
100     alert(Number('005.7800'));//5.78
101     alert(Number('005.78.700'));//NaN
102 //3、如果字符串是空字符串  则直接转换成 0
103     alert(Number(''));//0
104 //4、如果不是上面三种类型的话 则直接返回 NaN
105     alert(Number('abc123'));//NaN
106     alert(Number('12abc'));//NaN
107     alert(Number('12hu45'));//NaN
108 //5、如果是对象  首先会调用这个方法的 valueOf()方法,然后确定返回值是否能够转换成数值
109 //    如果转换的结果是NaN  在基于这个返回值再调用 toSring()方法  在测试返回值
110     var age={
111         toString:function(){
112             return '123';
113         }
114     }
115     alert(Number(age));//123
116     var box={
117         toString:function(){
118             return 'abc';
119         }
120     }
121     alert(typeof box);//object
122     alert(Number(box));//NaN
123 
124 //Number()函数在转换字符串的时候比较复杂且不怎么合理 故常用的是parseInt()和parseFloat()
125 
126 alert(parseInt('123'));//123
127 alert(parseInt('123abc'));//123        会返回整数部分
128 alert(parseInt('abc123'));//NaN        如果第一个字符不是数字就返回为NaN
129 alert(parseInt('45abc123'));//45    从第一个开始取  到最后一个连续数值结束为止
130 alert(parseInt('56.12'));//56        小数点不是数值
131 alert(parseInt('056.12'));//56        自动去掉前导0
132 alert(parseInt(56.12));//56            
133 alert(parseInt(''));//NaN            空值返回NaN,和全部是字符一个道理
134 var box={
135         toString:function(){
136             return '123';
137         }
138     }
139 alert(parseInt(box));//123
140 //识别八进制和十六进制  添加第二个参数 8,16
141 //如果为八进制数据是十六进制可以不添加的第二个参数,但是必须带上前导0x
142 //如果添加了第二个参数为 16 前面的前导0x就可以去掉, 
143 //为了后期维护方便最好添加第二个参数的同时也添加上前导 0x
144 alert(parseInt('045'));//45
145 alert(parseInt('0x34'));52
146 alert(parseInt('070'));70
147 alert(parseInt('0x1fg'));//31
148 alert(parseInt('045',8));//37 
149 alert(parseInt('45',8));//37
150 alert(parseInt('0x1fg',16));//31
151 alert(parseInt('1fg',16));//31
152 alert(parseInt('1e3'));//1    //不认识科学计数法
153  
154 //parseFloat()和parseInt()是一样的  只是不认识八进制和十六进制 
155     //只是认识一个小数点    认识科学计数法
156 alert(parseFloat('123abc'));//123
157 alert(parseFloat('0xa'));//0    //不认识十六进制
158 alert(parseFloat('0xa',16));//0    //不认识十六进制
159 alert(parseFloat('5.8h'));//5.8    
160 alert(parseFloat('12.3.4'));//12.3    //只是认识一个小数点
161 alert(parseFloat('012.300'));//12.3    //自动去掉前导和后导0
162 alert(parseFloat('1.2e3'));//1200    //将科学计数法转换成普通的数值
163 alert(parseFloat('a5.8h'));//NaN
Number
 1 /*---------- String 类型 -------------*/
 2 //String类型用于表示由0个或者多个16为的Unicode字符组成的字符序列,即字符串
 3 //字符串可以用双引号或者单引号表示
 4 
 5 //单引号和双引号都可以表示中间是一段字符串  但是必须成对使用不能嵌套使用
 6     var box="string";
 7     var age='string';
 8     alert(age+'abcd');
 9     alert(box+"abcd");
10     alert('abcd'+"abcd");
11     //alert('abcd");    //error
12 
13 // JS 中同样以反斜杠 \ 代表转义字符
14     alert("ab\tcd");//制表符
15     alert("eg\rji");//回车符
16     alert("ss\nji");//换行符
17     alert("ac\bcd");//空格符
18     alert("ab\fcd");//进纸符
19     alert("ab\\cd");//ab\cd
20     alert("a\"b\'cd");//a"b'cd
21     // \xnn    表示以十六进制nn表示的一个字符(由ASCII码计算而得)
22     alert("\x41");//A 
23     //\unnn    表示以十六进制代码 nnn 表示的一个Unicode字符
24     alert("\u03a3");//Σ  
25 
26 // JS 中的字符串变量的值同样是不可以改变的,若要改变某个变量保存的字符串的值
27 //首先要销毁原来的字符串,然后再用另外一个包含新的值的字符串变量来填充该变量
28     var box="abcd";
29     var age=box+"abcd";
30     alert(box);//abcd
31     box=age;
32     alert(box);//abcdabcd
33 
34 //任何类型的数据都可以转换成字符串类型 x.toString()和 String(x)方法
35     var box=200;
36     alert(typeof box);//number
37     alert(typeof box.toString());//string
38     alert(typeof box);//number
39     alert(box.toString());// '200'  输出的内容是在内存中带了单引号的 '200'
40     box=true;
41     alert(typeof box);// boolean
42     alert(box.toString());// 'true'  是带了引号的 'true'
43 
44 //一般进行 toString() 的时候是不需要传递参数的,但是在进行数值转化成字符串的时候,可以进行参数的传递
45     var box=12;
46     alert(box.toString());    //'12'
47     alert(box.toString(2));    //'1100'
48     alert(box.toString(8));    //'14'
49     alert(box.toString(16));//'c'
50     alert(box.toString(10));//'12'
51 
52 // x.toString() 方法是无法将 Undefined 和 Null 类型进行转化的
53     var box=null;
54     alert(typeof box);
55     //alert(box.toString());//error
56     var age;
57     //alert(age.toString());//error
58 
59 // 对于 Null 和 Undefined 类型的变量采用 String(x)方法将其进行转换
60 //String(x) 能够将任何类型的变量x进行转化成字符串类型
61     var box=null;
62     alert(String(box));//null
63     var age;
64     alert(age);//undefined
65 //如果值有 toString()方法 则调用该方法并返回相应的结果 如果是null或者undefined则返回null和undefined
66 
67 
68 
69 /* 简单了解 Object 类型  */
70 //ECMAScript 中的对象其实就是一组数据和功能的集合,对象可以通过new操作符后
71     //跟上要创建的对象的类型名称类创建
72     var box=new Object();
73     alert(typeof box);// object
74 //Object()是对象构造 如果初始化的时候不需要传递参数 可以不写括号 但是最好不要这样写
75     var box=new Object;
76     alert(typeof box);// object
77 
78 //Object()里面可以传递任何的对象,可以传递数值 字符串 布尔值 而且还可以进行计算
79     var box=new Object(2);
80     alert(typeof box);//object
81     var age=box+3;
82     alert(age);//5
83     alert(typeof age);//number  //age的类型还是根据里面的值来定
84 
85     var box=new Object(true);
86     var age=1;
87     if(box){ // box 类型是object 里面放的是布尔值 用于计算为 true
88         age++;
89     }else{
90         age--;
91     }
92     alert(age);// 2
93 
94 //同样可以使用这种 new 操作符来创建其他的类型
95     var box=new Number(5);    //或者是new Boolean(),new String()
96     alert(typeof box);//object
97     box++;
98     alert(box);//6
String;Object

 

 

posted on 2013-12-30 10:48  恋那片海  阅读(538)  评论(0编辑  收藏  举报