Javascript学习笔记一 之 数据类型

   在接触每一门编程语言之前,首先明白我们程序设计要处理的是“数据”,而“数据”又用“数据类型”将其区分。

   一.数据类型

   Javascript是一种弱类型的脚本语言,它一共有6种数据类型,又被分为基础数据类型,特殊数据类型,复合数据类型。

   1.基础数据类型:数值型,字符串型,布尔型

   2.特殊数据类型:null,undefined(区别在于null需要显性赋值,而undefined表示没有赋值)

   3.复合(引用)数据类型:Object(数组是特殊的对象)

        注:理解基础数据类型和引用数据类型的区别。如函数参数传递

   二. 包装类和基础数据类型的关系

      对于基础数据类型,都有相应的包装类(Object对象)与之对应

      Number,String,Boolean


    注:基础数据类型会在一定条件下转化成基础类型包装对象

  

  
  
var str =" 这是一个基础字符串";
var length = str.length();
// 当使用length()时,Javascript解释引擎会产生
//一个str的临时String对象,执行完后临时对象清除

 

 三.如何判断数据类型

      (1) typeof(鸡肋)

   仅可检测出以下6种数据类型:number, string, boolean, undefined, object, function(注意!)

            

  
  
alert( typeof ( null )); // 结果为object
alert( typeof (a)); // a未赋值,结果为undefined


 因此判断基础数据类型可以如下:

  
  
function type(o) {
return (o === null ) ? ' null ' : typeof (o);
}

另外typeof存在浏览器兼容性问题,

见:http://www.w3help.org/zh-cn/causes/SD9028

  (2)instanceof

    但对于复合数据类型(除了function,则全部返回object,无法通过typeof判断

           可使用instanceof检测某个对象是不是另一个对象的实例,注意instanceof的右操作数必须为对象:

   
   
function Animal() {};
function Pig() {};
Pig.prototype
= new Animal();
alert(
new Pig() instanceof Animal); // true

       instanceof不适合用来检测一个对象本身的类型

   

  (3)constructor

  

  
  
alert( " qqq " .constructor == String);
alert(
true .constructor == Boolean);

var o = 1 ;
alert(o.constructor
== Number);
alert({}.constructor
== Object);

alert(
1 .constructor == Number); // 报错
o = null ; // or undefined
alert(o.constructor); // 报错
  (4)Object.toString()
   
   
function isArray(o) {
return Object.prototype.toString.call(o) === ' [object Array] ' ;
}

     callapply的区别: 

  它们都是Function.prototype的方法(针对方法的),它是Javascript引擎内在实现的。

  实际上这两个的作用几乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg参数可以是变量,而apply([thisObj[,argArray]])中的参数为数组集合

  方法是借给另一个对象的调用去完成任务,原理上是方法执行时上下文对象改变了.

  (5)总结

 

代码
    
    
var _toS = Object.prototype.toString,

_types
= {

' undefined ' : ' undefined ' ,
' number ' : ' number ' ,
' boolean ' : ' boolean ' ,
' string ' : ' string ' ,
' [object Function] ' : ' function ' ,
' [object RegExp] ' : ' regexp ' ,
' [object Array] ' : ' array ' ,
' [object Date] ' : ' date ' ,
' [object Error] ' : ' error '

};


function type(o) {

return _types[ typeof o] || _types[_toS.call(o)] || (o ? ' object ' : ' null ' );
}

 
   四.数据类型转换
    Javascript有两种数据类型的转换方法:
  一种是将整个值从一种类型转换为另一种数据类型(称作基本数据类型转换),
  另一种方法是从一个值中提取另一种类型的值,并完成转换工作。 

  基本数据类型转换的如以下三种方法: 

    1.转换为字符型:String(); 例:String(678)的结果为"678" 
    2.转换为数值型:Number(); 例:Number("678")的结果为678 
    3.转换为布尔型:Boolean(); 例:Boolean("aaa")的结果为true 

  从一个值中提取另一种类型的值的如以下方法: 

    1.提取字符串中的整数:parseInt(); 例:parseInt("123zhang")的结果为123 
    2.提取字符串中的浮点数:parseFloat(); 例:parseFloat("0.55zhang")的结果为0.55 

  

    另外总结各种类型转换的方法

  

Number转化成字符串:String(number)  、

  Number.toString(2/8/16);//分别代表二进制\八进制\十六进制默认(无参)10进制 、
           toFixed(3) //保留小数点后3位 
        toExponextial(3); //小数点前1位, 小数点后3位如var n=123456.789; n.toExponextial(3);//1.234e+5即1.234X105
               toPrecision(4); //返回指定位数 如果位数不够完全显示,则按指数表示法(3个方法都会4舍5入)
 
 五.其他总结(容易忽视掉的东西)
 
       1.parseInt的陷阱
        以下部分摘自《Javascript精粹》:
        parseInt是一个将字符串转换为整数的函数。它遇到非数字时停止解析,所以parseInt("16")与parseInt("16 tons")产生相同的结果。如果该函数提示我们出现了额外文本就好了,但是它不会那么做。
       如果该字符串第一个字符时0,那么该字符串将被基于八进制而不是十进制来求值。在八进制中,8和9不是一个数字,所以parseInt("08")和parseInt("09")产生0作为结果。这个错误导致程序解析日期和时间时出现问题。幸运的是,parseInt可以接受一个基数作为参数,如此一来parseInt("08",10)结果为8.我建议你总是提供这个基数参数。
                                                                                                              
       另外。下面这个会显示1:
  
     
     
alert(parseInt( 0.0000001 ));

    这是由于超过一定精度js就会用科学计数法记录数字,例如:
  

     
     
alert(0.0000001);

    会得到1e-7,而parseInt会自动把参数转换成字符串的,那实际上就是:
  

     
     
s = (0.0000001).toString();
alert(parseInt(s));

     最后得到1就不奇怪了。

   使用parseInt必须记住里面参数是转换成字符串再做转换的。

  2.试着运行以下代码:

代码
      
      
alert( typeof null ); // object
alert( typeof undefined); // undefined
alert( typeof NaN); // number
alert(isNaN(NaN)); // true
alert(NaN == NaN); // false
alert(NaN >= NaN); // false
alert(NaN != NaN); // true
//
NaN的判断用isNaN()函数,NaN是唯一不等于自己的数

alert(
null == undefined); // true
alert(undefined == null ); // true
//
null和undefined互相==
alert( null === undefined); // false
alert(undefined === null ); // false
//
null和undefined互相!==

alert(
true == true ); // true
alert( false == false ); // true

alert(
null == false ); // false
alert( null === false ); // false

alert(
null >= undefined); // false
alert( null <= undefined); // false

alert(
typeof Infinity); // number Infinity表示最大值
alert(Infinity > 10 ); // true
alert(Infinity > " abc " ); // false
alert(Infinity == NaN); // false
alert(null instanceof Object); //false

你可能感兴趣的:(JavaScript)