首页 > 代码库 > js数据类型

js数据类型

一、js数据类型

string、number、Boolean、Array、object、Null、Undefined

1. js拥有动态类型

 相同的变量可以用作不同的类型

var x                // x 为 undefinedvar x = 6;           // x 为数字var x = "Bill";      // x 为字符串

 

2. 数据类型

  • string
    存储字符,可用单引号或双引号
  • number
    可带小数点或不带(支持科学记数法)
  • Boolean
    true  或   false
  • array
    //先创建再赋值var cars=new Array();cars[0]="Audi";cars[1]="BMW";cars[2]="Volvo";//创建的同时赋值var cars=new Array("Audi","BMW","Volvo");//直接赋值var cars=["Audi","BMW","Volvo"];
  • object
    由花括号分隔,括号内部,对象的属性以名称和键值对的形式定义,属性用逗号分隔
    var person={    firstname : "Bill",    lastname  : "Gates",    id        :  5566};
    //两种寻址方式name=person.lastname;name=person["lastname"];
  • undefined
    当声明的变量还未被初始化时,变量的默认值为undefined
    // 典型用法var i;i                     // 变量被声明了,但没有赋值function f(x){console.log(x)}f()                  //调用函数时,应该提供的参数没有提供,该参数等undefinedvar  o = new Object();o.p                 // 对象没有赋值的属性,该属性的值为undefinedvar x = f();x                    // 函数没有返回值时,默认返回undefined
  • null
    尚未存在的对象
    // 典型用法(1) 作为函数的参数,表示该函数的参数不是对象。(2) 作为对象原型链的终点。

  undefined 与 null

  null即是一个不存在的对象的占位符

  ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。

  区分: 

concole.log(null === undefined);     //   false concole.log(typeof null == typeof undefined); //  false

 

二、 js数据类型转换

 1. 转换函数

  • 转换成字符串(tostring)
    // numbervar iNum = 10;alert(iNum.toString());    //输出 "10"//Booleanvar bool = false;alert(bool .toString());    //输出 "false"//基模式var iNum = 10;alert(iNum.toString(2));    //输出 "1010"alert(iNum.toString(8));    //输出 "12"alert(iNum.toString(16));    //输出 "A"
  • 转换成数字
    parseInt()   parseFloat()
    /*parseInt() 方法首先查看位置 0 处的字符,判断它是否是个有效数字;如果不是,该方法将返回 NaN,不再继续执行其他操作。*//*但如果该字符是有效数字,该方法将查看位置 1 处的字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时 parseInt() 将把该字符之前的字符串转换成数字。*/var iNum1 = parseInt("12345red");          //返回 12345var iNum1 = parseInt("0xA");               //返回 10var iNum1 = parseInt("56.9");              //返回 56  小数点是无效字符var iNum1 = parseInt("red");               //返回 NaN// parseFloat() 方法与 parseInt() 方法的处理方式相似// 但第一个出现的小数点是有效字符var fNum4 = parseFloat("11.22.33");        //返回 11.22    

 

2. 强制类型转换

  ECMAScript 中可用的 3 种强制类型转换:Boolean、Number、String

  • Boolean(value) 
    // 当要转换的值是至少有一个字符的字符串、非 0 数字或对象时,Boolean() 函数将返回 true// 如果该值是空字符串、数字 0、undefined 或 null,它将返回 falsevar b1 = Boolean("");             //false - 空字符串var b2 = Boolean("hello");        //true - 非空字符串
  • Number(value)
    // Number() 函数的强制类型转换与 parseInt() 和 parseFloat() 方法的处理方式相似,只是它转换的是整个值,而不是部分值。var iNum1 = parseInt("56.9");          //返回 56var fNum2 = parseFloat("11.22.33");    //返回 11.22var iNum3 = Number("56.9");            //返回 56.9var fNum2 = Number("11.22.33");        //返回 NaN

    技术分享

  • String(value) 
    可把任何值转换成字符串

 

三、js数据类型判断

1. typeOf

类型结构
Undefined"undefined"
Null"object" (见下方)
布尔值"boolean"
数值"number"
字符串"string"
Symbol (ECMAScript 6 新增)"symbol"
宿主对象(JS环境提供的,比如浏览器)Implementation-dependent
函数对象 (implements [[Call]] in ECMA-262 terms)"function"
任何其他对象"object"

 

2. instanceof (判断已知对象类型)

  instance:实例,例子,所以instanceof 用于判断一个变量是否某个对象的实例,是一个三目运算式
  instanceof 运算符用于识别正在处理的对象的类型,要求开发者明确地确认对象为某特定类型在使用
  instanceof检测变量类型时,我们是检测不到number, ‘string‘, bool的类型的
var a = [],      b = new Date();function c(name){    this.name = name;}console.log(a instanceof Array) ----------> truealert(b instanceof Date)  ----------------> truealert(c instanceof Function) -------------> truealert(c instanceof function) -------------> false// 注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

 

3. constructor(根据对象的constructor判断)

  W3C定义:constructor 属性返回对创建此对象的数组函数的引用(返回对象对应的构造函数)

  constructor本来是原型对象上的属性,指向构造函数。但是根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,因此,实例对象也是能使用constructor属性的

  

var a = new Array();console.log(a instanceof Array) // a是否Array的实例  trueconsole.log(a.constructor == Array)  //  a实例所对应的构造函数是否为Array  true//examplefunction Dog(name){    this.name=name;}var Dollar=new Dog("Dollar");console.log(Dollar.constructor); //输出function Dog(name){this.name=name;}function Dog(){ }var Tim = new Dog(); console.log(Tom.constructor === Dog);//true// constructor属性是可以被修改的,会导致检测出的结果不正确function Dog(){ }function Cat(){ }Cat.prototype = new Dog();var m= new Cat();console.log(m.constructor==Cat); // falseconsole.log(John.constructor==Person); // true// instanceof 对于直接或间接引用都是trueconsole.log(m instanceof Cat); // trueconsole.log(John instanceof Person); // true

 

4. Object.prototype.toString.call 

function a() { }; var toString = Object.prototype.toString;console.log(toString.call(new Date) === ‘[object Date]‘);   //trueconsole.log(toString.call(new String) ===‘[object String]‘);//trueconsole.log(toString.call(a) ===‘[object Function]‘);       //true

 

5. $.type()(万能判断)

jQuery.type( undefined ) === "undefined"          // truejQuery.type() === "undefined"                     // truejQuery.type( null ) === "null"                    // truejQuery.type( true ) === "boolean"                 // true

 

如有建议或补充,欢迎留言交流~

参考:

http://www.jb51.net/article/73566.htm

js数据类型