zoukankan      html  css  js  c++  java
  • JavaScript中的数据类型

    数据类型概述

    undefinedNullBooleanNumber StringfunctionObject(复杂数据类型)

    javaScript 不支持任何创建自定义类型的机制,所有值都成为以上 6 中数据类型之一

    undefined类型

    Undefined 类型只有一个值,即特殊的 undefined

    在使用 var 或者let声明变量,但没有对其初始化时,这个变量的值就是 undefined我们在定义变量的时候,尽可能的不要只声明,不赋值。

    没有必要显式的给一个变量赋值为 undefined,因为没有赋值的变量会隐式的 (自动的)赋值为 undefined

    ECMAScript 3 版之前并没有引入这个值,引入之后为了正式区分空对象与未经初始化的变量。

    var s
    alert(s) // undefined

    未初始化的变量与根本不存在的变量(未声明的变量)也是不一样的。

    var s
    alert(s) // undefined
    // alert(a) // 报错:a is not defined
    
    // 使用typeof 判断一个未初始化的变量和未定义的变量返回都是undefined,从逻辑上思考,他们的值,一个是 undefined,一个报错;他们的类型,却都是 undefined
    alert(typeof s)
    alert(typeof a)

    Null类型

    Null 类型是一个只有一个值的数据类型,即特殊的值 null

    它表示一个空对象引用(指针),而 typeof 操作符检测 null 会返回 object

    var s = null
    alert(typeof s) //object

     如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null。这样,当检查 null 值就知道是否已经变量是否已经分配了对象引用了。

    var s = null
    if (s !== null) {
       alert('对象存在')
    }

    注意:undefined 是派生自 null 的,因此 ECMA-262 规定对它们的相等性测试返回 true

    由于 undefined null 两个值的比较是相等的,所以,未初始化的变量和赋值为 null 的变量会相等。这时,可以采用 typeof 变量的类型进行比较。但建议还是养成编码的规范,不要忘记初始化变量。

    var s = null
    var a
    alert(a == s) // true
    alert(a === s) // false
    alert(typeof a === typeof s) // false
    alert(undefined == null) // true
    alert(undefined === null) //fasle,三个等于号比较的是数据类型
    // undefined与null的区别
    // undefined代表没有赋值,null代表赋值了, 只是值为null
    var a1
    var a2 = null
    console.log(a1, a2) // undefined null
    // 什么时候给变量赋值为null
    // var a = null //a将指向一个对象, 但对象此时还没有确定
    // a = null //让a指向的对象成为垃圾对象
    //初始
    var a = null
    //中间
    var name = 'Tom'
    var age = 12
    a = {
      name: name,
      age: age
    }
    //结束
    a = null

    Boolean类型

    Boolean 类型有两个值(字面量)true false。而 true 不一定等于 1false 不一定等于 0

    JavaScript 是区分大小写的,True False 或者其他都不是 Boolean 类型的值。

    虽然 Boolean 类型的字面量只有 true false 两种,但 ECMAScript 中所有类型的值都有与这两个 Boolean 值等价的值。要将一个值转换为其对应的 Boolean值,可以使用转型函数 Boolean()

    var box = true
    alert(typeof  box) // boolean
    alert(box == 1) // true
    alert(box == 0) //false
    alert(box === 1) // false,三个等于号比较的是数据类型
    alert(typeof box == typeof 1) // false
    
    var str = 'hello'
    var str2 = Boolean(str)
    alert(typeof str) // string
    alert(typeof str2) // boolean
    alert(str2) // true ,如果str的值为''(空字符串)或者为null的话或者是undefined,结果为false

    上面是一种显示转换,属于强制性转换。而实际应用中,还有一种隐式转换。比如,在if 条件语句里面的条件判断,就存在隐式转换。

     var str = ''
      if (str) {
        alert('true')
      } else {
        alert('false')
      }

    Number类型

    Number 类型包含两种数值:整型和浮点型。为了支持各种数值类型,ECMA-262 定义了不同的数值字面量格式。输出都是按照十进制输出的

    NaN的类型是number,NaN是一个特殊的数值类型,表示Not a Number

    alert(typeof NaN) // number

    使用typeof检查Infinity是个number类型

    alert(typeof Infinity) //number

    如果使用Number表示的数值超过了最大值,会返回Infinity(正无穷),-Infinity(负无穷)

    Number类型的在js中整数运算基本可以保证精确度,但是浮点数运算可能得到一个不精确的结果,在精确度要求比较高的时候,尽量放在服务的计算

    alert(0.423 + 0.43)
    alert(3 + 1341412)

    可以将一个数值的字符串转换成number类型

    var str1 = '123'
    var str2 = 'abc'
    alert(Number(str1)) //123,Number类型
    alert(Number(str2))//NaN,不能将除了数值的字符串转成Number类型 

    Number对象常用的属性和方法查看:JavaScript的数值对象(Number)详解

     

    String类型

    String 类型用于表示由于零或多个 16 Unicode 字符组成的字符序列,即字符串。字符串可以由双引号(")或单引号(')表示。

    var str = 'hello'

    注意:在某些其他语言(PHP)中,单引号和双引号表示的字符串解析方式不同,而ECMAScript 中,这两种表示方法没有任何区别。但要记住的是,必须成对出现,不能穿插使用,否则会出错。

    var str = 'hello" // 报错

    转义字符:String 类型包含了一些特殊的字符字面量,也叫转义序列。

    alert('\') // 结果是一条反斜线
    alert('u03a3') // 结果是一个特殊字符

    字符串特点

    ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。

    要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

    var box = 'li'
    box = box + 'jia'
    alert(box)// lijia

    两个相同字符串之间的比较,在js中是为true的

    var box1 = '3'
    var box2 = '3'
    alert(box1 == box2) // true
    alert(box1 === box2) // true

    String()方法

    如果在转型之前不知道变量是否是 null 或者 undefined 的情况下,我们还可以使用转型函数 String(),这个函数能够将任何类型的值转换为字符串。

    alert(String(null)) //'null'
    alert(typeof String(null)) //string
    alert(String(2)) //'2'
    alert(typeof String(2)) //string

    toString()方法:toString()方法可以把值转换成字符串。

    var box1 = 3
    var box2 = null
    var box3 = false
    var box4 = {}
    alert(box1.toString())
    alert(typeof box1.toString()) // string
    // alert(box2.toString()) // 会报错:Cannot read property 'toString' of null,null没有toString方法
    alert(box3.toString())
    alert(box4.toString())
    alert(typeof box4.toString()) // string

    toString()方法一般是不需要传参的,但在数值转成字符串的时候,可以传递进制参数,只有数值类型才有效

    var box1 = 10
    alert(box1.toString(2)) // 表示二进制输出
    alert(box1.toString(8))
    alert(box1.toString(10))
    alert(box1.toString(16))

    字符串常用方法查看:JavaScript的基本包装类型_String类型

    Array数组类型

    一种特别的对象(数值下标,内部数据是有序的),将一组数据存放到数组中方便统一进行管理

    js中的数组可以存放各种数据(string,number,object,包括数组本身(二维数组)......等等)

    var arr = [{}, 'huang', 3]
    console.log(arr)

    通过下标对数组进行操作

    var arr = [{name: 'huang'}, 'huang', 3]
    console.log(arr[0].name) // huang,获取下标为0的那个元素

    真数组和伪数组:真数组可以使用数组的所有方法进行操作数组,伪数组不能使用forEach方法进行遍历,也不能使用数组的一般方法

    更多数组的操作详情:JavaScript数组操作详情

    ES6中新增了一些数组的方法,详情:ES5-ES6-ES7_数组的扩展

    function 类型

    声明function类型的方法以及调用function的方法

    var fn1 = function () {
      alert  (1)
    }
    function fn2() {
      alert(2)
    }
    
    alert(fn1) //打印出函数本身
    fn1() // 调用fn1这个方法,并且执行函数里面的代码
    fn2()

    Object类型

    ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建

    Object()是对象构造,如果对象初始化时不需要传递参数,可以不用写括号,但这种方式我们是不推荐的。

    var box1 = new Object()
    console.log(box1) // {},空对象

    Object()里可以任意传参,可以传数值、字符串、布尔值等。而且,还可以进行相应的计算。

    var box1 = new Object(3)
    var age = box1 + 3
    console.log(age) //6
    console.log(typeof age) //Number
    console.log(box1) // Number{3}
    console.log(typeof box1) // object

    既然可以使用 new Object()来表示一个对象,那么我们也可以使用这种 new 操作符来创建其他类型的对象。

    var box1 = new Number(3)
    var box2 = new String('3')
    console.log(typeof box1) // object
    console.log(typeof box2) // object

    Symbol数据类型

    在ES6中还有一种新增的数据类型:详情查看:ES5-ES6-ES7_Symbol数据类型

     

  • 相关阅读:
    未来经济形势未来会怎么样呢疑问?
    今天开车开锅啦!没有经验惹得祸,修了一天的汽车!(开车经验教训学习)
    《飓风营救》(Taken)(父女情深电影推荐)
    The Pursuit of Happyness 当幸福来敲门(励志电影推荐)
    老婆入院待产观察
    闵行区电动自行车上牌地址
    (转载)中国99%白领要破产 买房干嘛???
    日食图片(转载)
    简单的配置iis让主机支持wap
    大数据量的分页存储过程代码
  • 原文地址:https://www.cnblogs.com/LO-ME/p/10657834.html
Copyright © 2011-2022 走看看