zoukankan      html  css  js  c++  java
  • javaSrript_数据类型(2017-03-15)

    一、综述

    javaScript中的数据类型分为两类:

    基本类型:

      undefined:未定义。当声明变量却没有赋值时会显示该值。可以为变量赋值为undefined
      null:空、无。表示不存在,当为对象的属性赋值为null,表示删除该属性
      number:数值。最原始的数据类型,表达式计算的载体
      string:字符串。最抽象的数据类型,信息传播的载体
      boolean:布尔值。最机械的数据类型,逻辑运算的载体

    引用类型:

      object:对象。面向对象的基础

    二、基本类型

      var a=字面量 的形式来定义基本类型

    1.Undefined

      Undefined类型只有一个值undefined,当声明的变量未初始化时,该变量的默认值是undefined。

    注意:

      在JS中全局对象有一个undefined属性表示undefined,事实上undefined并非JavaScript的关键字,可以给全局的undefined属性赋值来改变它的值。

      值undefined并不同于未定义的值。 但是,typeof运算符并不真正区分这两种值。 但是,如果不用typeof运算符,就对oTemp2使用其他运算符,这将引起错误,因为那些运算符只能用于已定义的变量。

    var oTemp;
    alert(typeof oTemp); //output "undefined"
    alert(typeof oTemp2); //output "undefined"
    alert(oTemp2 == undefined); //error

      所有已声明但是没有初始化的变量,默认值都为undefined。

      函数没有明确返回值的时候,会默认返回undefined。

    2.Null

      Null类型也只有一个值null,但是JavaScript为它提供了一个关键字null来表示这个唯一的值。Null类型的语义是“一个空的对象引用”。

      注意:undefined类型是派生自null的,不严格的说二者都是指没有明确赋值的类型,但是细分之后,undefined类型,被用来形容未经初始化的变量,null类型被用来形容空对象指针。

    所以如果定义的变量准备在将来用于保存对象(即复杂的数据类型object),那么就该将该变量初始化为null。

    //null
    var car=null;
    alert('car的类型为:'typeof car)
    alert(null == undefined); //output "true"

      undefined与null相等。

      null表示尚未存在的对象。

      当函数返回的对象不存在时,返回null。

      当某个对象不需要时,可将值设为null。

    3.Boolen

    1)具有两个字面量true,false(注意区分大小写)

    2)将其他类型的值转换为布尔值,采用Boolen(var);

      规则

    3)在if()等判断中,boolean转换时自动进行的。

    4.Number类型

    1.有进制区别,有整数和浮点数之分。定义都适应var a=字面量 的形式

    • 整数 可以通过十进制,八进制,十六进制的字面值来表示。
      var intNum=55;//十进制
      var octalNum=070;//八进制数,第一位必须是0,解析为56
      var  octalNum=079;//无效的8进制数,9超过了8进制数的范围,解析为79
      var hexNum=0xA;//十六进制数,前两位必须是0x,后跟16进制数字(0~9及A~F)
    • 浮点数
      1、该数值中必须包含一个小数点,且小数点后必须有一位数字,如果小数点后只有零,则该小数会被转化为整数。
      2、浮点数所占据的内存空间是整数的两倍。
      3、对极大极小的浮点数采用e表示法。
       var floatNum=3.2e7;//3.2×10(7次幂)
       var floatNum=3.2e-7;//3.2×10(-7次幂)

    2.Number.MIN_VALUE代表最小数值,Number.MAX_VALUE代表最大数值,全局属性Infinity代表正无穷,-Infinity代表负无穷,NaN代表非数,可以使用isNan()进行判定

      • NaN
        1、即非数值,是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数,未返回数值的情况。比如任何数值除以0,本是不符合规范的,js里,这样的操作返回NaN(但是实际上,只有0除以0时返回NaN,其他则无穷值)。
        2、NaN有两个不同寻常的特点:任何涉及NaN的操作都会返回NaN,NaN值与任何值都不相等,包括本身。
        3、isNaN()函数,这个函数可以判断,传递的参数是否“不是数值”这里涉及数值转换的问题,例如“10”这个字符串就可以转换为10,但是“blue”这个字符串则无法转换为数字,所以isNaN("blue")==true

    3,将其他任何类型转换为数值类型可以用Number()函数,将字符串转换为数值类型使用parseInt(var,进制)或者parseFloat(var)

    4,指定小数点位数可以使用num变量.toFixed(3),转换为指数类型表示可以使用num变量.toExponetial()

    5.String类型

    1,length属性:字符串长度

    2,将某个值转换为字符串,可以对其调用toString(),最简单的是加上一个空字符串

    字符串相关操作方法:

    1,字符串拼接,使用"+",也可用concat()方法

    2,字符串切割,slice(),substr(),substring()方法,用法大同小异,掌握一种即可

    5,查找子字符串:indexof()和lastIndexof();另一个查找方法是search(),参数可以是字符串或者正则表达式

    6,删除前后空格:trim()

    7,大小写转换:toLowerCase()和toUpperCase()

    8,正则匹配:match()方法,调用效果和正则对象RegExp的exec()方法相同

    9,字符串替换:repalce(),第一个参数可以是字符串或者正则表达式,如果是字符窜,那么只替换第一个子字符串;如果是正则,则可以替换所有匹配的子字符串。

    10,字符串比较:因为字符串是基本类型,因此可以使用"=="进行比较;‘===’是强等。此外还有一个方法是localCompare()方法,会根据字母表中的排序比较大小,返回正数,0或者负数。

    11,字符串切割:split()。分隔符可以是子字符串,也可以是正则

    12,字符串中访问特定字符:charAt()或者charCodeAt();返回对应的字符或者字符编码

    三、引用类型

    引用类型都是Object或者其子类(js其实并没有子类这个概念?),js内置了一些引用类型来方便操作,如Date,Array,Math,RegExp等,这些类型都是全局对象window的属性。所有的object类型都有以下属性或方法

    constuctor
    hasOwnProperty(propertyName)
    isPrototypeOf(object)
    propertyIsEnumerable(propertyName)
    toString()
    valueOf()
    toLocalString()

    1.object类型

    js中的object类型更像java中的hashMap,也就是键值对

    1)新建,两种方法,构造函数和字面量

    //构造函数的方法
    var person=new Object();
    person.name="bobo";
    person.age=20;
    //字面量的方法
    var person={
      name="bobo",
      age=20
    }

    2)属性可以加引号也可以不加;访问属性可以用点表示法,也可用方括号表示法

    2.Array类型

    1.新建,两种方法,构造函数和字面量

    //构造函数
    var list=new Array();
    //字面量
    var list={1,2,3}

    和java等语言中的数组不同的是,js数组的每一项可以保存不同类型的变量,大小也是可以动态调整的

    检测一个变量是否是数组,可以使用Array.isArray方法

    2.相关属性和方法

    1)数组长度:length,这个属性不是只读的,通过设置这个属性,可以从数组末尾移除项(设置值<实际长度);或者向数组中添加项

    2)将数组转换为字符串:join("分割符"))

    3)相关栈方法:pusth(),pop();shift(),push();unshift(),pop()通过这些方法,可以使用数组来模拟队列或者栈

    4)数组排序:sort(),reverse()可以接收一个排序函数作为参数

    5)数组合并:concat()

    6)数组拆分:slice(),接收一个或者两个参数,即要返回项的开始位置和结束位置

    7)功能强大的splice():可以用于删除,插入,替换数组中的某一项

    8)查找数组中的元素:indexOf()和lastIndexOf()

    9)相关迭代方法,这些迭代方法的参数都是一个函数,

    every(),对数组中的每一项运行给定函数,如果每一项都返回true,那么就返回true

    filter(),对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组

    forEach(),对数组中的每一项运行给定函数,没有返回值

    map(),对数组中的运行给定函数,返回每次调用该函数的结果组成的数组

    some(),对数组中的每一项运行给定函数,如果该函数的任一项返回ture,则返回true

    10)归并方法

    reduce()和reduceRight(),接受参数为函数function(prev,cur,index,array)

    3,Date类型

    1.创建

    var now=new Date()

    2,常用属性和方法

    1)Date.now()返回当前的日期和事件的毫秒数

    2)getFullYear(),getMonth(),getDate(),getDay(),getHours()等

    4,Math对象(有点类似于静态方法调用)

    常用操作:

    1)Math.min()和Math.max(),传入的参数用,分割。如果得到数组中的最大值,可以使用Math.max.apply(Math,arrayVar)的形式

    2)Math.ceil(),Math.floor(),Math.round()

    3)Math.random()

    4)其他各种数学运算方法

    5,RegExp类型

    1,创建,有字面量和构造函数两种方法

    var express=/pattern/flags

    var pattern=new RegExp("[bc]at","i"),在使用构造函数创建的时候,因为参数是字符串,所以在需要的时候要进行双重转义

    2.常用属性和方法

    exec()  接受字符串参数,会返回匹配组相关信息,关于正则一向不是很明白,用到时候再看吧

    test()接受字符串参数,返回是否匹配的布尔值

    6,Function类型

    在js中,函数也是对象,也和其他引用类型一样具有属性和方法,因此可以可以作为函数的形参,也可以作为函数的返回值。

    1)在函数内部,有两个特殊的对象arguments和this,this和其他语言中的this一样,这里重点介绍arguments

    js中没有函数签名的概念,也不能实现传统意义上的重载。具体的说,js函数不在乎传递进来多少个参数,也不在乎是否通过命名的形参传入,在函数体内,可以通过arguments对象访问函数的参数数组。

    arguments拥有一些属性:

    callee:指向当前的函数对象

    caller:指向调用当前函数的函数的引用

    函数的属性和方法

    1)length属性:代笔函数希望接收的参数的个数

    2)prototype这个回头再说吧,对js的引用类型而言,prototype是保存它们所有实例方法的真正所在

    函数方法

    apply()和call(),可以在特定的作用于调用函数,接受的第一个参数是调用函数的对象,另一个是传入函数的参数。apply()使用数组传入参数,而call()则使用,来分割传入的参数

    7,URI编码方法

    1)encodeURI()主要用于对整个uri进行编码,与之对应的是decodeURI()

    2)encodeURIComponent()主要用于对于附加在URI后面的queryString部分进行编码,与之对应的是decodeURIComponent()

    四、访问方式

     基本类型值:按值访问,操作的是他们实际保存的值;

     引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;

    JS的基础类型与引用类型

    两种类型复制

    1.   基本类型变量的复制:从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上;

    JS的基础类型与引用类型

    1.  引用类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针执行存储在堆中的同一个对象;

    2. 复制操作结束后,两个变量实际上将引用同一个对象;因此改变其中的一个,将影响另一个;

    JS的基础类型与引用类型

    函数参数的传递:

    1.   ECMA中所有函数的参数都是按值传递的;

    JS的基础类型与引用类型

    两种变量类型检测

    1.   Typeof操作符是检测基本类型的最佳工具;

    2.   如果变量值是nul或者对象,typeof 将返回“object”;

    3.   Instanceof用于检测引用类型,可以检测到具体的,它是什么类型的实例;

    4.   如果变量是给定引用类型的实例,instanceof操作符会返回true;

    JS的基础类型与引用类型

    五、参考

    http://blog.sina.com.cn/s/blog_6fd4b3c10101d0va.html

    http://www.cnblogs.com/bobodeboke/p/4672917.html

  • 相关阅读:
    Andorid手机振动器(Vibrator)的使用
    Log.i()的用法
    刀哥多线程现操作gcd-10-delay
    刀哥多线程全局队列gcd-09-global_queue
    刀哥多线程Barrier异步gcd-08-barrier_async
    刀哥多线程同步任务作用gcd-07-sync_task
    刀哥多线程之主队列gcd-06-main_queue
    刀哥多线程之并发队列gcd-05-dispatch_queue_concurrent
    刀哥多线程串行队列gcd-04-dispatch_queue_serial
    刀哥多线程之03GCD 常用代码
  • 原文地址:https://www.cnblogs.com/scevecn/p/6553562.html
Copyright © 2011-2022 走看看