2021-06-13

2021/6/13 10:26:37

本文主要是介绍2021-06-13,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

maple-leaf-638022_1920.jpg
图片来源于:https://pixabay.com/zh/photos/maple-leaf-book-reading-dear-diary-638022/

JS的两大数据类型

官方定义的名称:

  • 原始值类型
  • 对象数据类型

原始值类型俗称:简单数据类型、基本数据类型
对象数据类型俗称:复杂数据类型、引用数据类型

原始值类型

  • Number
  • String
  • Boolean
  • null
  • undefined
  • Symbol
  • bigint

Number类型

  • 成员有 数字、NaN、Infinity、-Infinity
  • NaN:率属于Number类型,但不是一个有效的数字
  • Infinity / -Infinity 代表 正无穷 | 负无穷

Number特殊的地方

  • 我们比较是否为有效数字的时候不应该拿 NaN 和 数字 比较
/* NaN 不等于 NaN */
console.log(NaN === NaN); //=> false

/* NaN 不等于任何数字 */
console.log(NaN === 1); //=> false
console.log(NaN === Infinity) // false
  • 我们想要查看一个数字是否为有效数字时应该使用 isNaN
/* isNaN 方法是一个js内置函数 */
isNaN(NaN) //=> true
isNaN(1) //=> false
isNaN(Infinity) //=> false

Number类型的总结

  • NaN 不等于 NaN,所以判断是否为有效数字时我们应该使用 isNaN,而不是比较是否相等
  • isNaN 当不是一个有效数字才会返回 true, 有效数字返回 false

String类型

  • 所有用 单引号 、双引号、反引号 起来的都叫字符串
  • 反引号包裹着的字符串也叫模板字符串是ES6的语法
/* 单引号 '' */
var str1 = '这是一段字符串';

/* 双引号 "" */
var str2 = "这是一段字符串";

/* 反引号 `` */
var str3 = `这是一段字符串`;

注意

  • 双引号不能包裹双引号,单引号不能包裹单引号,反引号不能包裹反引号。但是它们可以互相包裹
  • 如果需要将两个字符链接起来需要用连接符 (+)
/* 将字符串连接起来 */
var str1 = '连接' + '字符';

/* 符号互相包裹 */
var str2 = `'粽' 情 '粽' 意`;

字符串的总结

  • 无论内容是什么,只要单引号、双引号、反引号包裹着的都是字符串
  • 同符号不允许被包裹

Boolean类型

  • Boolean类型只有 true 和 false 两个值
  • 只有当一个值为:空字符串空数组数字零nullundefined的时候才会为false,没有其他特殊情况

null 和 undefined 类型

  • null:表示这个结果是我们意料之中的
  • undefined:表示这个结果是我们意料之外的
  • null和undefined都是代表空的意思

例子:

/* 获取页面的HTML(根)标签的父亲节点 意料之中 */
var html = document.documentElement.parentNode;
console.log(html) //=> 结果null,因为语法知道根标签是没有父亲节点的,意料之中

/* 获取对象一个不存在的属性 意料之外 */
var obj = { name: 'obj' };
console.log(obj['age']); //=> 结果undefined,因为语法不知道obj里面有age这个属性当它去获取的时候发现这个属性压根不存在 意料之外,所以是undefined

null和undefined的总结

当去获取一个不知道且不存在的属性时就是 undefined
当去获取一个知道但为空的属性时就是 null

Symbol类型

  • ES6语法新增
  • 用Symbol声明出来的值,是唯一的

例子:

/* 声明两个Symbol值 比较是否相等 */
console.log(Symbol('A') === Symbol('A'));  // 结果为false,因为它们两个只是标识相同,但是值都是唯一的,所以为false

/* 获取对象中以Symbol值为键名的属性 */
var sy = Symbol('A');
var obj = {
    [sy]: 'symbolA',
    [Symbol('B')]: 'symbolB'
};
console.log(obj[Symbol('B')]); //=> undefined,只是标识相同,obj里面属性名为Symbol('B')值是不同的
console.log(obj[sy]); //=> symbolA,跟obj引用的是同一个变量所以就可以获取到值

Symbol类型总结

  • Symbol(‘A’) 只是将 ‘A’ 作为一个标识,但是其值仍然是唯一
  • 如果想要获取相同的结果,需要使用变量将值暂存起来。否则获取不到

BigInt类型

  • ES6语法新增
  • BigInt类型 在运算超大数字的时候可以保证精确度
  • 数字后面加个n就表示这个数字是一个BigInt类型
    image.png
/* 转成BigInt数据类型 */
console.log(BigInt(100)); //=> 100n

/* BinInt数据类型转换成Number类型 */
console.log(Number(9123452334564571n.toString())); //=> 9123452334564571

BigInt类型总结

  • 数字后面加n的代表是一个BinInt类型
  • 运算超出安全数的时候,需要使用BigInt类型,否则会出现精度不正确
  • BitInt类型反转Number类型,需要先转换成字符串,再转成数字

对象数据类型

  • 标准普通对象
  • 标准特殊对象
  • 非标准特殊对象
  • 可调用/执行对象

标准普通对象

  • 0 到 多组键值对组成 => { 键名:键值 }
    例子:
/* 定义普通标准对象 */
var obj = { name: 'obj' };

标准特殊对象

  • JS中的内置类
  • 数组、日期、错误
    例子:
/* 内置日期对象*/
console.dir(Date); //=>使用dir打印详情,而不是log

非标准特殊对象

  • 基于原始值类型,原始值的类型基于构造函数 new 出来的实例
/* new 一个非标准特殊对象 */
console.log(new Number(1)); //=> Number {1}

可执行/调用的对象

  • 函数对象 function
  • 函数是一个特殊的对象

结尾

尊敬的读者,谢谢您坚持看到最后。希望您可以在我的文章中学到一些知识。如果文章中有什么错误的地方,欢迎在评论区或者私信我改正,谢谢您!



这篇关于2021-06-13的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程