javascript中的数据类型,持续更新

老是以为在此以前做过的主题材料十分久没碰的话就能够遗忘,于是希图特意开三个笔录小题目的小说当题典用。

javascript中的数据类型,javascript数据类型

[0]5种数据类型:

    [0.1]主旨数据类型:Undefined、Null、Boolean、Number、String

       
[0.1.1]基本类型值是指轻巧的数据段,5种基本类型是按值访谈的,因为能够操作保存在变量中的实际值

       
[0.1.2]基本项指标值在内部存储器中占为己有一定大小的长空,被保存在栈内部存款和储蓄器中。从一个变量向另二个变量复制基本项指标值,会创建那一个值的多个别本。

        [0.1.3]无法给主旨项目标值增多属性

    [0.2]援用数据类型:Object

       
[0.2.1]援用类型值是指这个能够由八个值构成的对象。js不容许直接访问内部存款和储蓄器中的职责,也就是无法直接待上访谈操作对象的内部存款和储蓄器空间。在操作对象时,实际上是在操作对象的援引实际不是实际上的目标。

       
[0.2.2]引用类型的值是指标,保存在堆内存中,包涵引用类型值的变量实际上包罗的并不是目的自己,而是多个针对性该对象的指针。从一个变量向另三个变量复制援引类型的值,复制的实在是指针,因而多少个变量最后都指向同一个目的。

       
[0.2.3]对此引用类型的值,可以为其增添属性和艺术,也得以变动和删除其性质和艺术

[1]Undefined

    [1.1]Undefined类型独有三个值,正是undefined

    [1.2]var a <=> var a = undefined;   

   
[1.3]对于从未申明过的变量,只可以试行一项操作,就是行使typeof操作符检验其数据类型【但在严苛形式下会招致错误】

    [1.4]并发情况:

        [1.4.1]已注解未赋值的变量

        [1.4.2]获得对象不设有的性格

        [1.4.3]无再次回到值的函数的实践结果

        [1.4.4]函数的参数未有传来

        [1.4.5]void(expression)

    [1.5]类型调换

        Boolean(undefined):false

        Number(undefined):NaN

        String(undefined):’undefined’

[2]Null

   
[2.1]Null类型独有八个值,正是null,逻辑角度看,null值表示一个空对象指针

    [2.2]只要定义的变量将用来保存对象,最佳将该变量初始化为null

    [2.3]实则undefined值是派生自null值的,所以undefined == null

    [2.4]出现气象:对象不设临时

    [2.5]类型转变

        Boolean(null):false

        Number(null):0

        String(null):’null’       

    [注意1]null是空对象指针,而[]是空数组,{}是空对象,三者差异

    [注意2]null不可能加多自定义属性

[3]Boolean

    [3.1]Boolean类型独有三个值:true 和 false

    [3.2]并发景况:

        [3.2.1]规范语句导致系统实施的山民类型转变

        [3.2.2]字面量或变量定义

    [3.3]类型转变

        Number(true): 1 || Number(false) : 0

        String(true):’true’ || String(false):’false’

    [3.4]Boolean()

        Boolean(undefined):false

        Boolean(null):false

        Boolean(非空对象包涵空数组[]和空对象{}):true

        Boolean(非0): true || Boolean(0和NaN):false

        Boolean(非空包涵空格字符串):true || Boolean(”):false

    [注意]true不一定等于1,false也不自然等于0

 [4]Number

    [4.1]Number类型使用IEEE754格式来表示整数和浮点数值

    [注意]能够用贰个值-0来将其转变到多少个数字

    [4.2]三种字面量格式是十进制、八进制、十六进制

       
[4.2.1]八进制字面值的率先位必需是0,然后是八进制数字种类(0-7),假如字面值中的数值高于了限制,那么前导0将被忽视,前边的数值被视作十进制数深入分析

        [4.2.2]八进制字面量在从严形式下是于事无补的,会产生js抛出错误

       
[4.2.3]十六进制字面值的前两位必得是0x,后跟十六进制数字体系,字母可大写可小写

        [4.2.4]十六进制中字面值中的数值走出范围,如出现g,h等会报错

       
[4.2.5]在张开算术计算时,全数以八进制和十六进制表示的数值最后都将被调换成十进制数值

    [4.3]数值表示:

        [4.3.1]js中可以保存正0和负0,且被感到十三分

       
[4.3.2]浮点数值:该数值中必得含有叁个小数点,並且小数点前边总得起码有一个人数字。

           
[4.3.2.1]出于浮点型数值须要的内部存款和储蓄器空间是保留整数值的两倍,因而js会不失时机地将浮点数值调换来整数值,若小数点后没有跟另外数字照旧浮点值自个儿代表的便是一个整数,这几个数值会作为整数值来保存。

            [4.3.2.2]浮点数值的万丈精度是19位小数

           
[4.3.2.3]对于非常的大可能相当小的数,能够用科学计数法e来表示的浮点数值来表示

           
[4.3.2.4]私下认可情形下,js会将小数点后边带有6个0以上的浮点数值转变为以e表示法表示的数值

           
[4.3.2.5]基于IEEE754数值的浮点计算的劣点是舍入抽样误差的难点。如:0.1+0.2
=== 0.3(17个0)4

        [4.3.3]js中的数值范围是Number.MIN_VALUE(5e-324) ——
Number.MAX_VALUE(1.7976931348623157e+308)

           
[4.3.3.1]倘诺过量正数范围,输出Infinity(正无穷大),超过负数范围,输出-Infinity(负无穷大)

            [4.3.3.2]+-Infinity不能够参与数值计算

            [4.3.3.3]Number.MAX_VALUE+1 !=
Infinity,因为Computer最多保留伍十个人尾数位,保存不了一千多位,早就失去精度,即小数位全为0,所以相加不改变

            [4.3.3.4]Number.MIN_VALUE – 1 !=
-Infinity,也是一致的案由,所以结果为-1

           
[4.3.3.5]可以用isFinite()来分明贰个数值是还是不是东周的,满含着隐式类型转变Number()

            [4.3.3.6]isFinite(NaN) //false

        [4.3.4]NaN

            [4.3.4.1]NaN与其余值都不等于,包蕴NaN本人

            [4.3.4.2]其他关联NaN的操作都会再次回到NaN

           
[4.3.4.3]isNaN()来推断那些数字是否NaN,包蕴着隐式类型转变Number()

   
[4.4]数值转变:Number()可用以另外项目,parseInt()和parseFloat特意用于把字符串转换到数值

   
[注意1]Number()、parseInt()、parseFloat()尚可各个进制的数字,但对于含数字的字符串并不适用

    [注意2]Number()、parseInt()、parseFloat()中数字为1.2.
会报错,但字符串为’1.2.’则不会报错

        [4.4.1]Number()

            Number(true):1 || Number(false):0

           
Number(种种进制的数字):运算后的十进制的数字,如1.0或1.或01会以1输出

            Number(undefined):NaN

            Number(null):0

            Number(字符串):

               
Number(只含有数字的十进制和十六进制的字符串):运算后的十进制的数字

                [注意]字符串中不识别八进制,遵照十进制数字管理

                Number(”和’ ‘):0

                Number(别的景况的字符串):NaN

            Number(对象):

                Number([]和[0]和[-0]):0

                Number([数字]):运算后的数字

                Number([1,2]和{}和任何对象):NaN

       
[4.4.2]parseInt():在改换字符串时,会忽视字符串前边的空格,直到找到第二个非空格字符。假使第一个字符不是数字字符大概负号,parseInt()就能再次回到NaN。假设是,则继续深入分析,直到分析完结只怕境遇非数字字符。

           
[4.4.2.1]parseInt()能够识别出各样进制的整数,但在剖判八进制字面量的字符串,ECMAScript3会解析八进制,但ECMAScript5尚未深入分析八进制的本领

           
[4.4.2.2]parseInt()函数提供第1个参数,表示有一些进制,如:parseInt(‘123’,16或10或2)

           
[4.4.2.3]parseInt(各个进制的数字):运算后的十进制的数字,如1.0或1.或01会以1出口

           
[4.4.2.4]因为parseInt()是极其用来管理字符串转变数字的,所以parseInt(其余品类包括”)//NaN

       
[4.4.3]parseFloat():类似于parseInt(),会忽略字符串前面包车型客车空格,直到找到第二个非空格字符

            [4.4.3.1]parseFloat()只好深入分析十进制字符串

           
[4.4.3.2]parseFloat(种种进制的数字):运算后的十进制的数字,如1.0或1.或01会以1出口

 [5]String:由单引号或双引号括起来的字符种类,任何字符串的长度都得以经过拜访length属性获得

    [5.1]字符字面量,也叫转义连串

        \n 换行

        \t 制表

        \b 空格

        \r 回车

        \f 进纸

        \\ 斜杠

        \’ 单引号

        \” 双引号

        \xnn 以十六进制nn表示叁个字符(n为0-f),如\x41表示’A’

        \unnnn
以十六进制nnnn表示一个Unicode字符(n为0-f),如\u03a3意味着希腊语(Greece)字符ε

    [5.2]ECMAScript中的字符串是不可变的   

   
[5.3]字符串连接需求先创制三个新字符串,然后在新字符串中填充八个必要拼接的字符串,最终再销毁原本的字符串。那么些历程在后台发生,也是在少数旧版本浏览器(IE6)拼接字符串速度慢的原因,但后来已经消除了那些低功能难点

    [5.4]字符串转变

        [5.4.1]toString()

            Null和Undefined未有该形式

            Boolean、Object、String有该措施

            Number使用该措施能够传递基数2、8、10、16,如var num =
10;num.toString(2);//1010

            但10.toString(2)会报错,因为数字背后不能够跟标记符

        [5.4.2]String()

            有toString()方法,使用toString()方法

            String(null);//’null’

            String(undefined);//’undefined’   

       
[5.4.3]要把某部值转变为字符串,能够采取加号操作符把它与贰个空字符串”加在一同

   [5.4.4]假使数组中的某一项的值是null可能undefined,那么该值在join()、toLocaleString()、toString()和valueOf()方法再次来到的结果中以空字符串表示

末段给大家一个简约的例证表明下那多种基本类型的不及

var testString = "Hello"; 
var testBoobean = true; 
var testUndefined = undefined; 
var testUndefined1; 
var testNull = null; 
var testObject = {a:1}; 
var testFunction = function(){return;}; 

alert(testString);//"string" 
alert(testBoobean);//"boolean" 
alert(testUndefined);//"undefined" 
alert(testUndefined1);//"undefined" 
alert(testUndefined2);//"undefined" 
alert(testNull);//"object" 
alert(testObject);//"object" 
alert(testFunction);//"function"

  

目录

八种关键数据类型实行值复制
数组去重
数组去重并计数


三大引用类型

兑现clone()方法,对三种重大数据类型进行值复制

Object、Array、Boolean、Number、String

分成三种情形:普通变量,Array,Object

因为array和object里也只怕带有援引类型,所以递归调用

function clone(obj){
    var copy;
    if(obj instanceof Array){
        copy=[];//用空数组来一个一个接收数据
        obj.forEach(function(value,index){
            copy[index] = clone(obj[index]);
        })
        return copy;
    }else if(obj instanceof Object){
        copy = {};//用空对象来一个一个接收数据
        for(var i in obj){
            copy[i]=clone(obj[i]);
        }
        return copy;
    }else{//值类型直接赋值
        return obj;
    }
}

1.Object类型

我们来看的超越57%类型值都以Object类型的实例,创设Object实例的不二秘诀有三种。

率先种是接纳new操作符后跟Object构造函数,如下所示

var person = new Object();

person.name = “Micheal”;

person.age = 24;

第二种方法是采用对象字面量表示法,如下所示

var person = {

  name : “Micheal”,

  age : 24

};

数组去重

Array.prototype.delRepeat = function() {
    var res = [];//创建一个新的数组存放结果
    var json = {};//创建一个空对象
    for(var i = 0; i < this.length; i++) {//每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复
        if(!json[this[i]]) {
        res.push(this[i]);
        json[this[i]] = 1;
        }
    }
    return res;
}

var arr = [12, 13, 3, 'haha', 13, 12, 4, 'haha', 'hi', 'hihi'];
alert(arr.delRepeat());

然则那样有个比相当大的难点,正是字符串 ‘123’ 和 数值123
会被视作同样成分被跳过。

于是乎能够做如下的修改:

Array.prototype.delRepeat = function() {
    var res = [];//创建一个新的数组存放结果
    var json = {};//创建一个空对象
    var strFlag = '';//判断是否为字符串的标记
    for(var i = 0; i < this.length; i++) {//每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复
        if(typeof this[i] == 'string' ) {  
            strFlag = 'str_';  
        } else {  
            strFlag = '';  
        } 
        if(!json[strFlag+this[i]]) {
        res.push(this[i]);
        json[strFlag+this[i]] = 1;
        }
    }
    return res;
}

var arr = [12, 13, 3, 'haha', 13, '12', 4, 'haha', 'hi', 'hihi'];
alert(arr.delRepeat());

2.Array类型

数组的每一类可以用来保存任何类型的数量,也等于说,能够用数组的第三个职责来保存字符串,第一个职位保存数值,第多少个地方保存对象….别的,数组的尺寸是能够动态调解的。

始建数组的为主办法有三种

先是种是应用Array构造函数,如下所示

var colors = new Array(“red”,”blue”,”yellow”);

第三种是运用数组字面量表示法,如下所示

var colors = [“red”,”blue”,”yellow”];

数组去重并计数

计算数组["番茄炒蛋","泡椒牛柳","香干肉丝","番茄炒蛋","香干肉丝","蜜汁鸡腿"]中逐一菜的个数。

function test(arr) {
    var hash = {};
    var str = arr.toString();
    str.replace(/[\u4E00-\u9FA5\uF900-\uFA2D]+/g, function($1) {//正则是匹配中文(包括了中日韩文)
    if($1 in hash)
        hash[$1]++;
    else
        hash[$1] = 1;
    });
    return hash;
}
var arr = ["番茄炒蛋","泡椒牛柳","香干肉丝","番茄炒蛋","香干肉丝","蜜汁鸡腿"];
console.log(test(arr));

现实的非常国语及字符方法:/[\u4E00-\u9FA5\uF900-\uFA2D]/
说明:
u4e00-u9fbf : unicode CJK(中国和扶桑韩)统一表意字符。u9fa5后至u9fbf为空
uF900-uFAFF : 为unicode CJK 包容象形文字 。uFA2D后至uFAFF为空

3 Function类型

每种函数都是Function类型的实例,况且都与别的引用类型同样具有属性和格局。函数平时是利用函数评释语法定义的,如下所示

function sum(num1,num2){

  return num1 + num2;

};

 

js判别目的依旧数组

1.对此Javascript 1.8.5(ECMAScript 5),变量名字.isArray(
)能够完结这么些目标

1 var a=[];
2 var b={};
3 Array.isArray(a);//true
4 Array.isArray(b)//false

  

2.假令你只是用typeof来检查该变量,不论是array仍旧object,都将回来‘objec’。 此难点的三个卓有成效的答案是是检查该变量是否object,

再者检查该变量是或不是有数字长度(当为空array时间长度度也说不定为0,object的长度为undefined)。

var a=[];
var b={};
typeof a === 'object' && !isNaN(a.length)//true
typeof b === 'object' && !isNaN(b.length)//false

3.调用toString( )方法试着将该变量转化为表示其类其余string。 

var a=[];
var b={};
Object.prototype.toString.call(a)  === '[object Array]'//true
Object.prototype.toString.call(b)  === '[object Array]'//false

4  object.constructor === Array

var test=new Array();

if (test.constructor==Array)
{
document.write("This is an Array");
}

  

 

http://www.bkjia.com/HTML5/1308309.htmlwww.bkjia.comtruehttp://www.bkjia.com/HTML5/1308309.htmlTechArticlejavascript中的数据类型,javascript数据类型
[0]5种数据类型:
[0.1]主导数据类型:Undefined、Null、Boolean、Number、String
[0.1.1]基本类型值是指容易…