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:临时过来用一下,因为原型容易被改变

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

var _obj={
    isNull:'Null',
    isUndefined:'Undefined',
    isNumber:'Number',
    isString:'String',
    isBoolean:'Boolean',
    isSymbol:'Symbol',
    isObject:'Object',
    isMath:'Math',
    isDate:'Date',
    isRegExp:'RegExp',
    isWindow:'Window',
    isArray:'Array',
    isFunction:'Function'
}
var _type={};
var _toString=Object.prototype.toString;
for(var key in _obj){
    if(!_obj.hasOwnProperty(key)) break;
    var reg=new RegExp(`\\[object ${_obj[key]}\\]`)
    function anonymous(reg,val){
        return reg.test(_toString.call(val))
    }
    _type[key]=anonymous.bind(null,reg)
}
console.log(_type);
console.log(_type.isArray([]))

元素对象的深一层理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值