• 【笔记】JS数据类型总结


    JavaScript有六种数据类型,分别为undefined、null、number、string、Boolean、object,前面的五种是基础数据类型,也称之为原始类型,也就是无法再细分的基本类型,object则是复杂数据类型,其中通常是不止一种数据类型,除此之外在ES6当中又新增加了一种symbol,表示为唯一的值,这个还没有搞懂暂时涉及。

    undefined:表示还没有定义
    null:表示为'空'
    number:整数或者小数
    string:字符串文本
    boolean:布尔值,true或者false
    object:表示一个对象,键值对

    Undefined与Null

    1.当你通过var声明一个变量并且没有对这个变量进行初始化的时候,那么该变量的数值默认为undefined

    var a;
    console.log(a);// undefined
    

    此外当你调用函数的时候没有返回值的时候也会默认返回一个undefined

    function fn() {}
    console.log(fn()); // undefined
    

    2.未声明和未初始化还是有区别的,如下,a未初始化,b则是未声明,系统会报错

    var a;
    	
    console.log(a);// undefined
    console.log(b);// ReferenceError: b is not defined
    

    3.null表示一个空对象的指针,假如你定义一个变量未来将用于存放对象,最好初始化为null

    var a = null;
    

    undefined与null的区别在哪里呢?

    我们可以这样理解,null表示为有内容,而这个内容就是为空,而undefined表示的为未定义,还没有想好要放什么,假设我们面前放着这一张纸张想要画画,如果使用null,意思就是这张纸的画面就是一片空白(艺术!艺术!),而如果使用了undefined则是我放着这一张纸,但是还没想好画什么呢,就先这样放着吧。

    但是如果你使用==来进行对比你会发现返回一个true,并且在if语句的()当中两者都会被转换成false.

    Boolean

    布尔值只有两个值:true表示真false表示假,区分大小写,通常以下情况下会出现布尔值,

    逻辑运算符: &&、||、!
    运输符: 、!=、=、!==、>、>=、<、<=
    if语句的()当中自动转化为boolean值

    此外还可以使用Boolean()来进行转换,除了undefined、null、false、0、NaN、""或''(空字符串)会被转化为false之外,其余都会被转换为truw

    Number

    1.JavaScript的所有数字都是以64位浮点数形式储存,由于二进制浮点数的算法原因,我们还能看到以下情况

    console.log(0.1 + 0.2 ); // false
    

    实际得到的数值是略微大于0.3的,具体可以看这里

    2.除了十进制外还可以表示为八进制、十六进制、二进制

    // 八进制:有前缀0的数值,或者有前导0、且只有0-7
    var num8 = 070; // 56
    
    // 十六进制:有前缀0x或0X的数值,有且只有0-9,a-f
    var num16 = 0X3e; // 62
    
     // 二进制:有前缀0b或0B的数值,有且只有0,1
    var num2 = 0B10; // 2
    

    3.number还可以使用科学计数法进行表示

    console.log(3e13); // 30000000000000
    console.log(3e-3); // 0.003
    

    4.JavaScript的Number对象提供可以表示的最大最小是

    Number.MAX_VALUE // 1.7976931348623157e+308  2的1024次方
    Number.MIN_VALUE // 5e-324 2的-1023次方
    

    当你超过之后就会发生溢出,编程Inifinity,如果为负数则是-Inifinity,

    5.NaN表示为非数值,当本来要返回数值的操作未返回数值的情况,例如数字同字符串的-

    console.log('a' - 10); // NaN
    

    当然要是使用+就不会返回NaN,因为会转化为字符串。

    console.log('a' + 10); // a10
    

    任何同NaN的操作都会返回NaN

    console.log(NaN + 10); // NaN
    

    并且NaN同任何值都不相等,包括自身。

    console.log(NaN === NaN); // false
    

    6.+0与-0
    两者通常情况下都是相等的,除了作为分母的时候

    console.log((1 / +0) === (1 / -0)); // false
    

    7.与数值相关的全局方法有

    parseInt():用于将字符串转化为整数
    parseFloat():转换为浮点数
    isNaN():是否为非数值
    isFinite():是否为正常数值

    具体转化规则行查询文档,这里需要注意的是parseInt()有第二个参数,表示的是被解析字符串的进制

    parseInt('1000', 2) // 8
    parseInt('1000', 8) // 512
    

    String

    1.字符串通常用"",''表示,可以在单引号当中放双引号,反过来也可以,需要注意的是开头结尾要相同

    console.log('a string"); // 报错 nvalid or unexpected token 
    

    2.有一些特殊字符不可以直接在字符串当中打出来,需要通过转义符才行

    :null(u0000)
     :后退键(u0008)
    f :换页符(u000C)
    :换行符(u000A)
    :回车键(u000D)
    :制表符(u0009)
    v :垂直制表符(u000B)
    ' :单引号(u0027)
    " :双引号(u0022)
    :反斜杠(u005C)

    3.当字符串被创建后就不可变(包括数组的length也是不可变),要改变内容只能先销毁先前的内容。

    var lang = 'java';
    lang = lang + 'script';
    

    上面操作并不是直接在原来的数组直接拼接script字符串,而是创建一个新的字符串,然后填充javascript之后销毁先前的两个字符串。

    4.字符串可以使用数组方括号方式读取

    var str = 'this is a string';
    console.log(str[0]); // t
    

    5.toString()数值、布尔值、对象、字符串都有这个方法,详情看MDN文档

    object

    1.对象简单讲就是键对值的集合,其中可以包含多种数据类型,包括嵌套对象

    var obj = {
    	num: 123,
    	str: 'javascript',
    	bool: false,
    	otherObj: {}
    }
    

    2.对象是引用类型,也就是说上面的obj实际上存放的是某个对象的地址,因此,当另一个对象直接等于obj的时候,实际上复制的是对象的地址,因此无论哪个修改都会影响到另一个对象,属于浅拷贝。

    var obj1 = {a: 1}
    var obj2 = obj1;
    
    obj2.a = 3;
    
    console.log(obj1.a); // 3
    

    3.属性的读取和设置可以使用.点操作符或者[],数字键名不能用.读取,还需要注意的是方括号当中属性名需要用""包裹

    var obj = {
    	1: 666,
    	'a_b': 777
    }
    
    console.log(obj.1); // 报错
    console.log(obj[1]); // 666
    
    console.log(obj[a_b]); // 报错
    console.log(obj['a_b']); // 777
    

    属性的删除则是使用delete

    delete obj.1;
    

    4.想要知道对象当中是否存在某个属性可以使用in,返回一个布尔值

    var obj = {a: 1};
    'a' in obj // true
    

    使用for in可以遍历对象全部属性

    for (var i in obj) {
      console.log(i);
    } 
    

    使用这两个的时候为了避免遍历到继承的属性和方法,应当使用hasOwnProperty()先进行判断是否为对象本身的属性方法。

    for (var i in obj) {
    	if (object.hasOwnProperty(i)) {
    		// ...
    	}
    }
    

    5.对象实例常用属性和方法

    constructor: 指向构造函数的指针
    hasOwnProperty(): 判断是否对象本身的属性
    toString():返回对象的字符串表示。
    valueOf():返回对象的字符串、数值或布尔值表示。

    typeof与instanceof

    typeof可以用来确定数据类型

    console.log(typeof 'str'); // string
    console.log(typeof 123); // number
    console.log(typeof true); // boolean
    console.log(typeof undefined); // undefined
    
    function fn(){};
    console.log(typeof fn); // function
    
    console.log(typeof null); // object
    

    可以看到null返回了一个object,说明null本质是一个对象,一个空对象。

    对于以上类型typeof够用了,然而对于复杂的object却并不够

    console.log(typeof []); //object
    console.log(typeof {}); //object
    

    这时候需要我们的instanceof了,它会返回一个布尔值,表示的是是否为某个构造函数的实例

    console.log([] instanceof Array); //true
    console.log({} instanceof Object); //true
    
    var str = new String();
    console.log(str instanceof String); //true 
    

    参考

    阮一峰JavaScript教程-数据类型

    JavaScript高级程序设计 第三章

  • 相关阅读:
    快捷方式总结
    高版本数据库数据附加到低版本数据库中的解决方案
    boost_1_63_0在Win10上VS2015编译
    基于ACE的TAO开发---一个简单的入门实例-----VS2008(二)
    基于ACE的TAO开发---一个简单的入门实例-----VS2008(一)
    Wireshark抓包过滤
    Wireshark抓本地回环
    使用UMDH进行内心泄露分析
    类设计者的核查表
    关于数据同步,窗口同步之类
  • 原文地址:https://www.cnblogs.com/souldee/p/9339097.html
Copyright © 2020-2023  润新知