javascript中的数据类型,持续立异

一而再感觉在此以前做过的主题材料很久没碰的话就会忘记,于是筹算专门开3个记下小标题标小说当题典用。

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

[0]伍种数据类型:

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

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

       
[0.1.2]基本项目标值在内部存款和储蓄器中占据一定大小的上空,被保留在栈内存中。从一个变量向另1个变量复制基本类型的值,会成立这些值的三个别本。

        [0.1.3]不可能给宗旨类型的值增加属性

    [0.2]引用数据类型:Object

       
[0.2.1]引用类型值是指那个能够由多个值构成的对象。js不允许直接待上访问内部存款和储蓄器中的地点,约等于不能够一直访问操作对象的内部存款和储蓄器空间。在操作对象时,实际上是在操作对象的引用而不是事实上的目的。

       
[0.2.2]引用类型的值是目的,保存在堆内部存款和储蓄器中,包括引用类型值的变量实际上包括的并不是目的自己,而是三个针对该对象的指针。从二个变量向另1个变量复制引用类型的值,复制的实际是指针,由此七个变量最终都针对同1个目的。

       
[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类型惟有1个值,便是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不一定等于一,false也不自然等于0

 [4]Number

    [4.1]Number类型使用IEEE75四格式来代表整数和浮点数值

    [注意]可以用一个值-0来将其调换来1个数字

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

       
[4.2.1]捌进制字面值的首先位必须是0,然后是八进制数字体系(0-7),固然字票面价值中的数值高于了限定,那么前导0将被忽视,前面包车型地铁数值被看做拾进制数解析

        [4.2.2]8进制字面量在严酷方式下是没用的,会促成js抛出荒唐

       
[4.2.3]十陆进制字面值的前两位必须是0x,后跟十6进制数字系列,字母可大写可小写

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

       
[4.2.5]在打开算术计算时,全部以八进制和十陆进制表示的数值最终都将被调换到10进制数值

    [4.3]数值表示:

        [4.3.1]js中能够保存正0和负0,且被感觉非常

       
[4.3.2]浮点数值:该数值中必须带有2个小数点,并且小数点后边总得至少有1人数字。

           
[4.3.2.1]出于浮点型数值供给的内部存款和储蓄器空间是保留整数值的两倍,因而js会不失时机地将浮点数值调换到整数值,若小数点后未有跟别的数字仍旧浮点值本身代表的就是多少个整数,这些数值会作为整数值来保存。

            [4.3.2.2]浮点数值的万丈精度是壹多少人小数

           
[4.3.2.3]对此非常的大只怕非常的小的数,可以用科学计数法e来表示的浮点数值来表示

           
[4.3.2.4]默许情状下,js会将小数点前边带有5个0以上的浮点数值转变为以e表示法表示的数值

           
[4.3.2.5]据他们说IEEE754数值的浮点总计的症结是舍入基值误差的难题。如:0.1+0.二=== 0.三(一五个0)四

        [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,因为电脑最多保留5八位尾数位,保存不了一千多位,早就失去精度,即小数位全为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.’则不会报错

        [4.4.1]Number()

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

           
Number(各类进制的数字):运算后的10进制的数字,如一.0或1.或0壹会以一输出

            Number(undefined):NaN

            Number(null):0

            Number(字符串):

               
Number(只包罗数字的10进制和十陆进制的字符串):运算后的10进制的数字

                [注意]字符串中不识别捌进制,依照10进制数字管理

                Number(”和’ ‘):0

                Number(别的情状的字符串):NaN

            Number(对象):

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

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

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

       
[4.4.2]parseInt():在转移字符串时,会忽略字符串前边的空格,直到找到第三个非空格字符。假如第1个字符不是数字字符或然负号,parseInt()就会回到NaN。纵然是,则继续分析,直到解析完结只怕境遇非数字字符。

           
[4.4.2.1]parseInt()能够分辨出各个进制的整数,但在分析八进制字面量的字符串,ECMAScript三会分析八进制,但ECMAScript伍平昔不解析八进制的本领

           
[4.4.2.2]parseInt()函数提供第二个参数,表示有点进制,如:parseInt(‘123’,1陆或十或二)

           
[4.4.2.3]parseInt(种种进制的数字):运算后的10进制的数字,如1.0或一.或0一会以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或一.或0壹会以一输出

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

    [5.1]字符字面量,也叫转义体系

        \n 换行

        \t 制表

        \b 空格

        \r 回车

        \f 进纸

        \\ 斜杠

        \’ 单引号

        \” 双引号

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

        \unnnn
以十六进制nnnn表示二个Unicode字符(n为0-f),如\u03a叁象征希腊共和国(The Republic of Greece)字符ε

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

   
[5.3]字符串连接要求先创设叁个新字符串,然后在新字符串中填充四个须要拼接的字符串,最后再销毁原来的字符串。那一个过程在后台发生,也是在少数旧版本浏览器(IE六)拼接字符串速度慢的来由,但后来1度化解了这些低效能难点

    [5.4]字符串调换

        [5.4.1]toString()

            Null和Undefined未有该方法

            Boolean、Object、String有该形式

            Number使用该措施能够传递基数二、八、十、1陆,如var num =
10;num.toString(2);//拾10

            但十.toString(二)会报错,因为数字前边不可能跟标志符

        [5.4.2]String()

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

            String(null);//’null’

            String(undefined);//’undefined’   

       
[5.4.3]要把某部值调换为字符串,能够运用加号操作符把它与2个空字符串”加在一同

   [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类型

大家来看的大部类型值都以Object类型的实例,创制Object实例的不2秘技有二种。

率先种是行使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());

而是那样有个相当的大的难点,正是字符串 ‘1二三’ 和 数值12三会被看成同样成分被跳过。

于是乎可以做如下的更动:

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类型

数组的每一种可以用来保存任何项目的数量,也正是说,能够用数组的率先个职位来保存字符串,第3个地点保存数值,第两个岗位保存对象….其余,数组的轻重是足以动态调解的。

开创数组的主干格局有三种

第一种是运用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(中国和日本韩)统一表意字符。u玖fa5后至u玖fbf为空
uF900-uFAFF : 为unicode CJK 包容象形文字 。uFA二D后至uFAFF为空

3 Function类型

各样函数都是Function类型的实例,而且都与此外引用类型同样享有属性和章程。函数日常是应用函数注脚语法定义的,如下所示

function sum(num1,num2){

  return num1 + num2;

};

 

js推断目标依旧数组

一.对此Javascript 一.捌.五(ECMAScript 5),变量名字.isArray(
)能够落成这么些目标

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

  

二.只要您只是用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]基本类型值是指简单…

相关文章