• JS中的数据类型


    数据类型

    JS中的数据类型的分类

    分类

    正则 // 两个斜杠中间加点东西就叫正则

    1. Number数字类型

    验证是不是数字类型

    1. NaN:不是一个有效数字

    2. NaN跟谁比都是false

    全局isNaN & Number.isNaN

    全局isNaN会对参数做数据类型转换,即不是number会先转换成number

    isNaN() - JavaScript | MDN

    其他类型转数字*

    Number和parseInt/parseFloat的区别:

    引用类型->字符串->数字,js底层规则,浏览器v8引擎底层

    parseInt/parseFloat 浏览器额外提供的方法

    1. String字符串类型

    其他类型转字符串

    引用数据类型:

    字符串拼接* +加法

    +加法

    1. boolean布尔类型

    只有这5种情况是false,其他都为true

    只要不是这5种情况,都为true。

    v8引擎底层机制,在实现数据类型转换的时候,机制如此。

    其他类型转boolean*

    Number:

    Number(xxx)

    parseInt

    parseFloat

    ==

    数学运算 + - * /

    String:

    toString

    字符串拼接

    1. null和undefined的区别

    null和undefined都代表没有

    null:意料之中;undefined:意料之外

    从性能来讲:0比null要消耗一点点内存

    undefined表示未定义 未知的

    具体比如:

    getElementById 返回null

    函数默认没有返回值 undefined

    null和undefined的区别_曹莓养乐多多的博客-CSDN博客_null和undefined的区别

    深入探究:null 和 undefined 究竟有何区别? - 知乎

    null 和undefined的区别_@是静静啊的博客-CSDN博客_null和undefined的区别

    1. 对象数据类型

    多组键值对

    总结:

    每个对象都是有0-多组键值对组成的,每组用逗号分隔,属性名不能重复。

    属性名只能是数字或字符串。

    操作属性:用点号或中括号。数字只能用中括号。

    delete 彻底删除属性

    数组特殊对象

    索引+天生自带length属性

    末尾追加一项

    数据类型的区别

    数据类型:

    函数 Symbol 正则 ……

    知其然而知其所以然。

    js代码放到浏览器中运行。可以这么理解,浏览器得派一个人一行行执行代码,并且要提供代码执行的环境。饭店:大堂和服务员。

    提供的环境就是栈内存。栈内存就是从“内存条”中分出来的。

    执行代码:进栈执行

    栈内存:

    提供代码自上而下执行的环境

    存储简单数据类型:变量存储空间和值存储空间

    而复杂的数据类型?比如东西很多时,我们会新建一个整体,我们会先放在箱子里,或者先放在仓库

    引用类型和基本数据类型的区别:

    基本的存储在栈内存中,引用存储在堆内存中。

    因为基本数据类型简单,所以存储在栈内存的值存储空间中;而引用相对来说比较复杂,所以存储在堆内存中。

    之后所有的操作都是操作这个值,对引用的操作是操作地址。若两个引用同一个地址,若其中一个改了,其他也都改了。共用同一个堆地址。

    课堂练习题

    有一个细节点:

    赋值:先创变量,再创值,最后再关联

    底层机制。

    阿里面试题

    扩展一下:等号赋值的特点

    js中所有的赋值操作,包括面向对象中的原型继承,所有方式都是关联引用模式,而不是走拷贝模式。并不是把值直接拷贝给a,而是走了关联引用模式。

    js中的赋值不是拷贝而是关联,而是让它和谁关联。

    先创变量,再创值。换句话说,是先处理等号左边,再处理等号右边,等号是让等号左右边关联。这个顺序很重要(这里说的是解析的顺序左到右,然后执行的顺序是右到左,但是依然可以理解为同时赋值)。

    JavaScript连续赋值的执行顺序问题_虾泥泥泥泥的博客-CSDN博客_js同时赋值

    其他

    数据类型检测初识

    常用的数据类型分类

    基础数据类型:

    nulll undefined bool number string Symbol

    引用数据类型:

    object和function。

    object:对象(数组是一种特殊的对象),正则,Math数学函数对象,Date对象

    检测数据类型的方法有且仅有4种。

    前3种都有自己的缺点,toString是最好的。轻量级检测时用前3种就够了。

    typeof

    1. 返回结果

    1. 局限性:

    1. null会被检测成object

    2. 无法区分 数组 普通对象 正则等。只要是对象,返回的都是object。

    专题汇总:数据类型检测*

    js中的数据类型:

    基本数据类型:

    null undefined boolean String Number Symbol

    引用数据类型:

    一:Object:

    {}普通对象、[]数组、/\d/正则对象、Math数学对象、new Date()、类的实例、类的prototype

    二:Function

    typeof

    null:空对象指针

    优势:快 简单

    使用typeof的场景:

    instanceof

    局限性:

    1. 不能处理基本数据类型

    *基本数据类型也是所属类的实例 类的实例又是对象类型

    1. 只要在当前实例原型链上出现过的类,结果都为true。用户可能会手动修改原型链的指向。

    检测实例是否隶属于某个类

    constructor

    因为所属类的原型上会天生自带constructor属性,指向该类本身。通过该机制,找到constructor。所以找到到直属类原型上的constructor。

    很容易被修改,不确定性太高了。

    临时用一下,做严谨一点不行

    Object.prototype.toString

    Object原型上的toString:this,所属类的详情信息

    方法很强大

    最万能最强大的方法

    数据类型检测:

    基本数据类型或者function:typeof快

    引用数据类型,检测全一点:Object.prototype.toString

    instanceof或constructor:临时过来用一下,因为原型容易被改变

    专题汇总:封装数据类型检测方法

    1. var _obj={
    2. isNull:'Null',
    3. isUndefined:'Undefined',
    4. isNumber:'Number',
    5. isString:'String',
    6. isBoolean:'Boolean',
    7. isSymbol:'Symbol',
    8. isObject:'Object',
    9. isMath:'Math',
    10. isDate:'Date',
    11. isRegExp:'RegExp',
    12. isWindow:'Window',
    13. isArray:'Array',
    14. isFunction:'Function'
    15. }
    16. var _type={};
    17. var _toString=Object.prototype.toString;
    18. for(var key in _obj){
    19. if(!_obj.hasOwnProperty(key)) break;
    20. var reg=new RegExp(`\\[object ${_obj[key]}\\]`)
    21. function anonymous(reg,val){
    22. return reg.test(_toString.call(val))
    23. }
    24. _type[key]=anonymous.bind(null,reg)
    25. }
    26. console.log(_type);
    27. console.log(_type.isArray([]))

    元素对象的深一层理解

  • 相关阅读:
    1004 成绩排名
    一零二四、pyspark在jupyter中的完美运行
    计算机毕业设计Java哈尔滨旅游项目推荐平台演示录像2020(源码+系统+mysql数据库+Lw文档)
    CVE-2022-40871 Dolibarr任意添加管理员与RCE漏洞分析
    centos虚拟机服务器手把手搭建
    Intel汇编-CMP比较
    71-Java的包装类、正则表达式、Arrays
    Redis_01_Redis安装与使用
    Linux Kernel Module知识大全之一(基础)
    go基础语法10问
  • 原文地址:https://blog.csdn.net/betterangela/article/details/127436134