前言

写着 TypeScript 学习笔记, 顺便也写点 JS 的呗.

参考

JS数据类型分类和判断

阮一峰 – 数据类型

JS 数据类型

string

number

boolan

undefined

null

object

symbol (es6)

bigint (es2020)

其中 symbol 和 bigint 是后来加进去的

另外还有一些很常见但其实它们不能说是类型. array, function, class, arrow function, NaN, Regex, Date

typeof

typeof 是用来判断类型的.

console.log('string', typeof 'string');
console.log('number', typeof 1);
console.log('boolean', typeof true);
console.log('undefined', typeof undefined);
console.log('null', typeof null);
console.log('object', typeof {});
console.log('symbol', typeof Symbol('v'));
console.log('bigint', typeof (100n));

结果

只有一个奇葩, null = object. 这个是历史原因.

另一组

console.log('array', typeof []);
console.log('function', typeof function() {});
console.log('arrow function', typeof (() => {}));
console.log('date', typeof new Date());
console.log('reg', typeof /\d/gi);
console.log('NaN', typeof NaN);
console.log('class', typeof class{});

结果

我们先讲好理解的, function, arraw function 都是 function, JS 的 class 只是语法糖其实也是 function, 所有它们三都是 function, 没问题.

reg, date 都是 new 出来的对象, 没问题

最后只剩下 array = object, NaN (not a number) = number 比较乱水了. (背起来呗)

类型判断方式

除了用 typeof 还有一些常用的技巧

判断 null

null === null

判断 NaN

isNaN(NaN)

判断 Array

Array.isArray([])

判断 Date, Regex

(new Date()) instanceof Date

黑魔法 typeof

console.log('string', Object.prototype.toString.call('string').slice(8, -1).toLowerCase());

效果

类型转换

参考: 阮一峰 – 数据类型转换

所有类型都可以被强制转换成 boolean, string, number

转 boolean

Boolean(variable) 或者 !!variable 2 种写法都可以把 variable 强制转换成 boolean

它的规则是除以下 5 个值转成 false, 其余都转成 true

转 number

Number(variable) 或者 +(variable) 2 种写法都可以把 variable 强制转换成 number

'324' = 324
'' = 0
true = 1
false = 0
'324abc' = NaN
undefined = NaN
null = 0

几个记忆点

1. boolean true = 1, false = 0 (好记)

2. empty string = 0 (可以记)

3. full number string = number 和 partial number string = NaN (这个和 parseInt, parseFloat 有时会搞乱, parse 会自动过滤掉不是 number 的 string, 比如 parseInt('100px') = 100, Number('100px') = NaN) (可以记, 但要记得和 parse 不同)

4. undefined = NaN, null = 0 (不好记...为什么这 2 个不同...乱水)

当强转对象

三个步骤

valueOf > toString > Number(variable)

概念是先把对象转成普通类型

首先是调用 valueOf, 如果返回的依然是对象就再调用 toString, 如果依然是对象就报错

只要 valueOf 或 toString 返回的不是对象, 那么就 Number(variable)

转 string

转换规则是

123 = '123' (好记)

true = 'true' (好记)

undefined = 'undefned'  (好记)

null = 'null'  (好记)

当强转对象

toString > valueOf  > String(variable)

概念和 Number 一样, 只是顺序不同, 它先调用 toString 如果依然返回对象就调用 valueOf

自动类型转换

if (variable) 会把 variable 强行转成 boolean

!!(variable) 会把 varable 强行转成 boolean

+(variable) 会把 varable 强行转成 number

string + variable 会把 varable 强行转成 string e.g. '123' + 3 = '1233'

variable -*/ variable 会把 variable 变成 number e.g. '123' - '3' = 120

variable == variable 双等号在对比时, 也会自动类型转换.

双等号 ==

参考: JavaScript中双等号(==)的比较机制

这个规则挺多的, 真实开发中已经被禁用了. 其实没有必要学.

首先是

1. null 和 undefned 是相等的

2. null 和 undefined 不可以被转换类型

3. NaN 和谁都不相等, 包括 NaN... 所以 NaN == NaN 是 false, NaN != NaN 是 true

4. string == string, number == number, bool == bool, object == object 这些都不会有自动转换

5. 类型不同的情况下, 比如 string == number, bool == string, object == number, 先把他们转成 Number(string) == Number(boolean). Number 是老大就对了.

我日常会用的类型转换

+(new Date()) 把日期转成 number, 表示 1970 到日期的 milliseconds

true = 1 和 false = 0 (number 和 boolean 间的转换)

if(object|array) 判断空 null or undefined (我只会判断 object 和 array, string, number 我不会这样做)

'abc' + 123 把 number 拼接到 string 里.

其它的我都不会去记也不会去用.

JavaScript – 数据类型的更多相关文章

  1. Javascript:Javascript数据类型详解

    要成为一个优秀的前端工程师,系统的学习Javascript,有夯实的Javascript基础,以及对语言本身的深刻的理解,是基本功.从Javascript数据类型开始,我将对Javascript知识体 ...

  2. JavaScript数据类型 typeof, null, 和 undefined

    JavaScript 数据类型 在 JavaScript 中有 5 种不同的数据类型: string number boolean object function 3 种对象类型: Object Da ...

  3. 网页、JavaScript 数据类型

    JavaScript 数据类型 一.基本数据类型: 字符串.数字.布尔.日期和时间 JavaScript 拥有动态类型 JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: 1 v ...

  4. javascript数据类型、初始化

    Javascript数据类型有6种: 数值型数据类型(Number): 字符串(String): 布尔型数据(Boolean): 对象数据(Object): 空(Null): 未定义(Undefine ...

  5. 第九十九节,JavaScript数据类型

    JavaScript数据类型 学习要点: 1.typeof操作符 2.Undefined类型 3.Null类型 4.Boolean类型 5.Number类型 6.String类型 7.Object类型 ...

  6. Javascript数据类型共有六种

    Javascript数据类型共有六种 /* var box; alert(typeof box); // box是Undefined类型,值是undefined,类型返回的字符串是undefined ...

  7. JavaScript复习之--javascript数据类型隐式转换

    JavaScript数据类型隐式转换.一,函数类    isNaN()    该函数会对参数进行隐式的Number()转换,如果转换不成功则返回true.    alert()    输出的内容隐式的 ...

  8. 数据的分类-JavaScript数据类型

    JavaScript数据类型 1.数据类型是什么? 我们接触的绝大多数程序语言来说,把数据都进行了分类,包括数字.字符.逻辑真假:int,long,string,boolean....等等:我们都知道 ...

  9. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

  10. 每天五分钟-javascript数据类型

    javascript数据类型分为基本数据类型与复杂数据类型 基本数据类型包括:string,number,boolean,null,undefined,symbol(es6) 复杂数据类型包括:obj ...

随机推荐

  1. 动态分配内存new和delete

    #include<iostream> /* 动态分配内存用new关键字,语法:new 变量类型(初始值) C++11支持{} new int(5) ---- 申请了一个整型内存,并赋初值为 ...

  2. 使用GSAP制作动画视频

    GSAP 3Blue1Brown给我留下了深刻印象.利用动画制作视频,内容简洁,演示清晰.前两天刚好碰到一件事,我就顺便学习了一下怎么用代码做动画. 以javascrip为例,有两个动画引擎,GSAP ...

  3. 如何去除字符串中的 "\n" ?80% 的同学错了!

    大家好,我是鱼皮,今天分享一个小知识. 我最近负责的工作是设计一个 SQL 解析引擎.简单来说,就是将一个 SQL 表达式字符串,解析为一颗对象树,从而执行查询等一系列操作. 在最开始,我就遇到了一个 ...

  4. vue中sass与SCSS的区别

    在Vue中,通常使用SCSS(Sassy CSS)而不是Sass来编写样式.SCSS是Sass的一种语法扩展,提供了更多的功能和灵活性,因此在Vue项目中更常见.下面是Sass和SCSS之间的主要区别 ...

  5. Python爬虫(1-4)-基本概念、六个读取方法、下载(源代码、图片、视频 )、user-agent反爬

    Python爬虫 一.爬虫相关概念介绍 1.什么是互联网爬虫 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据 解 ...

  6. Visual Studio中如何解决error C4996: 问题

    error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To di ...

  7. java面试一日一题:讲下mysql中的锁

    问题:请讲下在mysql中的锁 分析:该问题主要考察对中锁的掌握,主要考察的是读.写锁.行锁.间隙锁.next-key,其他还有表锁.意向锁 回答要点: 主要从以下几点去考虑, 1.mysql中的锁有 ...

  8. 【Mybatis-Plus】06 代码生成器 CodeGenerator

    导入生成器需要的依赖坐标: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybat ...

  9. 电脑时间不同步导致的上网报错:core/proxy/vmess/encoding: failed to read response header > websocket: close 1006 (abnormal closure): unexpected EOF

    报错内容: 2023/12/16 14:08:56 [Warning] [775541588] xxxxx.com/core/app/proxyman/outbound: failed to proc ...

  10. AC自动机 提高篇

    文本生成器 首先考虑一个容斥,算出不包含任何一个单词的文章的数量. 我们设 \(dp_{i,j}\) 表示当前文章长度为 \(i\),最后一个字符在 \(AC\) 自动机上的 \(j\) 号点的方案数 ...