js数据类型

# 一共7中数据类型
   + null[typeof为object]                         var a = null;
   + undefined[typeof为undefined]        未定义
   + boolean                                           true / false
   + number                                            1
   + string                                               “1”    //string 也是基础类型
   + 引用类型  (object、array、function)
   + Symbol                         
 
# 引用类型  (object、array、function)
   +object                                              {“name”:”jack”,”age”:12}
   +array     数组也是object,array[typeof为object]                 [1,2,3]
   +function
       是function,不是object
 

判断类型有以下4种判读方法

第一种方式:   typeof

  typeof null   ---> "object"

  typeof undefined  ---> "undefined"

  typeof true | false  ---> 'boolean'

  typeof 42    ---> 'number'

  typeof "42" ---> 'string'

  typeof { name : '1'} | []  ---> 'object'

  typeof Symbol    ---> 'symbol'

  typeof ()=>{}       ---> 'function'

  typeif void 0      ---> 'undefined'

第二种方式  instanceof  但是这种方式只适合判断object类型

  比如 : var arr = [] ; arr instanceof Array   ---> true

                                         arr instanceof Object     -->  true

      null instanceof Object ---> false                   //虽然typeof为object,单null不是Ojbect的实例

     [function] instanceof Object | Function  --> true

第三种方式  Object.prototype.toString.call()   这种方式可以将全部的数据类型检测出来 也是 推荐的方式

  因为toString是Object的原型方法, 而 Array Function 等都是Object的实例。都重写了toString 方法。返回的是类型的字符串

  Object.prototype.toString.call(null)  --->  [object Null]

  Object.prototupe.toString.call(undefined)  ---> [object Undefined]

  Object.prototype.toString.call(123)  ---> [object Number]

  Object.prototype.toString.call(true) ---> [object Boolean]

  Object.prototype.toString.call('123') ---> [object String]

  Object.prototype.toString.call({})    ---> [object Object]

  Object.prototype.toString.call([])    ---> [object Array]

  Object.prototype.toString.call(Math) ---> [object Math]

  Object.prototype.toString.call(function(){}) ---> [object Function]

  Objdec.prototype.toString.call(new Date)  ---> [object Date]

  Object.prototype.toString.call(Symbol())   ---> [object Symbol]

 
 
 
js中所有的基础类型都是不可变的。基础类型是值类型,object是引用类型。
     var s = "abc";
     s.length = 100;
     s.length;//依然是3
     基础类型调用函数或者属性时,是先将通过s产生为一个新对象,操作都是在这个对象上进行的。不影响原有数据s。
 
全局变量默认所属的对象是window,如
    var name = "jack";
    window.name = "jack";
 
undefined与null比较
    2者参与计算都是false
    undefined不是对象,null是对象
    null===undefined   //false
    null==undefined     //true
 
NaN
   NaN不等于任何一个数字,虽然其本身确实是个数字。所以有Nan==NaN为false,NaN === NaN 为false
   isNaN一般用来判断影式转换后是否为数字:
                isNaN(3) =  false;
                isNaN("34") = false;
                isNaN({}) = true;
                isNaN("ab4") = true;
                isNaN("123BB") = true;
                isNaN(NaN) = true;
                所以一般可以用isNaN来判断一个输入是不是数字。
   跟Number.isNaN的区别是,Number.isNaN不做转换,而是直接看是不是NaN,只有NaN才返回true,其他均为false
                Number.isNaN(3) =  false;
                Number.isNaN("34") = false;
                Number.isNaN({}) = false;
                Number.isNaN("ab4") = false;
                Number.isNaN("123BB") = false;
                Number.isNaN(NaN)=true;
 NaN跟任何数做算术都是NaN
               NaN+3= NaN
               NaN+NaN = NaN
               NaN-NaN = NaN
               
               0/0 = NaN
               1/0 = Infinity              
               -1/0 = 1/(-0) = Infinity              
 
             
 

定义一个类,并定义其函数:
function person(firstname,lastname,age,eyecolor)
{
   this.firstname=firstname;
   this.lastname=lastname;
   this.age=age;
   this.eyecolor=eyecolor;

   this.changeName=changeName;
   function changeName(name)
   {
      this.lastname=name;
   }
  this.__defineGetter__("firstname", function(){  
          return firstname + "mask2";
    });  
  this.__defineSetter__("firstname", function(val){
      firstname = val +"mask1";
  });
 
     
}
var x = new person("sun","chunjie","28","black");
x.firstname = “dddsg”;
alert(x.firstname);
 

 
 
//字面定义,以下也是定义对象
var p = {
    x:0,
    y:10,
    z:100,
    put:function(){},
    get x(){//x属性的getter方法
        return 0;
    }
    set x(newX){//x属性的setter方法
        this.x = newX;
    }
 
};

 
以下方法定义的都是对象,用new就是引用类型了。
var carname=new String;
var x=      new Number;
var y=      new Boolean;
var cars=   new Array;
var person= new Object;
 
 
 
 
posted @ 2018-04-03 12:25  东方春  阅读(116)  评论(0编辑  收藏  举报