一文带你走进js-数据类型与数据结构的世界

目录
  • 2. 数据类型
    • 2.1 原始类型(6 种原始类型,使用 typeof 运算符检查)
    • 2.2 null 与 Object
  • 3. 原始值
    • 3.1 原始值基本概念
    • 3.2 各类型说明

1. 什么叫动态类型

  • JavaScript 是一种弱类型或者说动态语言。
  • 我们不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。
  • 这也意味着你可以使用同一个变量保存不同类型的数据
let a;     // 初始不给任何类型
a = 11;    // a此时是number类型
a = "二大爷"; // a 变成了字符串类型
a = true;  // a 变成了布尔类型

实际应用过程中并不推荐这样做,容易出现一些不可预知的错误

  • 比如你兄弟忽然变成了女的,又很漂亮(睡还是不睡?)
  • 比如你闺蜜忽然变成了男的,很帅(上还是不上?)
  • 比如隔壁老王变成了你老婆…(老王自己变成绿帽?)
  • 综上所述,数据类型一旦被确定,不要轻易篡改~~

2. 数据类型

  • 你可能仍然以为JavaScript只有 6 种数据类型(这就是固有认知)
  • 最新的 ECMAScript 标准定义了 8 种数据类型:

2.1 原始类型(6 种原始类型,使用 typeof 运算符检查)

  • undefined:typeof instance === “undefined”
  • Boolean:typeof instance === “boolean”
  • Number:typeof instance === “number”
  • String:typeof instance === "string"
  • BigInt:typeof instance === “bigint”(任意大的整数
  • Symbol :typeof instance === “symbol”

2.2 null 与 Object

  • null: typeof instance === “object”
  • typeof instance === “object”。
  • 任何 constructed 对象实例的特殊非数据结构类型,也用做数据结构:(new Object,new Array,new Map,new Set,new WeakMap,new WeakSet,new Date),和几乎所有通过 new 关键字创建的东西。

2.3 typeof 操作符重点说明

  • typeof 操作符的唯一目的就是检查数据类型。
  • 如果我们希望检查任何从 Object 派生出来的结构类型,使用 typeof 是不起作用的,因为总是会得到 “object”。
  • 检查 Object 种类的合适方式是使用 instanceof 关键字(数组与对象等),但即使这样也存在误差(目前没有百分百准备的方法,很遗憾)

3. 原始值

3.1 原始值基本概念

  • 除 Object 以外的所有类型都是不可变的(值本身无法被改变)。
  • 例如,与 C 语言不同,JavaScript 中字符串是不可变的(JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变),我们称这些类型的值为“原始值”。

3.2 各类型说明

  • 布尔类型:一个逻辑实体,可以有两个值:true 和 false
  • Null类型:只有一个值: null,就是啥也没有
  • Undefined类型:一个没有被赋值的变量会有个默认值 undefined
  • Number类型:没有像Java一样进一步细分类型,整数和浮点数都可以。还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)
  • BigInt 类型:JavaScript 中的一个基础的数值类型,可以用任意精度表示整数。可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。BigInt是通过在整数末尾附加 n 或调用构造函数来创建的。

语法:BigInt(value);

value: 创建对象的数值。可以是字符串或者整数

BigInt() 不是构造函数,因此不能使用 new 操作符

  • String类型:字符串是不可更改的。这意味着字符串一旦被创建,就不能被修改。但是,可以基于对原始字符串的操作来创建新的字符串。

获取一个字符串的子串可通过选择个别字母或者使用 String.substr().

两个字符串的连接使用连接操作符 (+) 或者 String.concat().

  • Symbols类型:唯一的并且是不可修改的, 并且也可以用来作为Object的key的值
  • Object类型:对象可以被看作是一组属性的集合,用对象字面量语法来定义一个对象时,会自动初始化一组属性。

属性的值可以是任意类型,包括具有复杂数据结构的对象。属性使用键来标识,它的键值可以是一个字符串或者符号值(Symbol)

以上就是一文带你走进js-数据类型与数据结构的世界的详细内容,更多关于js 数据类型与数据结构的资料请关注我们其它相关文章!

(0)

相关推荐

  • JavaScript数据结构之双向链表

    单向链表在遍历时只能从头到尾或者从尾遍历到头:所以单向链表可以轻松到达下一节点,但是回到上一个节点是很困难的 而双向链表既可以从头遍历到尾, 又可以从尾遍历到头,链表的相联是双向的,一个节点既有向前连接的引用,也有向后连接的引用 但是正因如此,双向链表在插入或者删除某个节点时,需要处理四个节点的引用,并且所占用内存空间也更大一些 双向链表实现 JavaScript 代码实现双向链表 // 创建双向链表的构造函数 function DoublyLinkedList() { // 创建节点构造函数

  • 详解JavaScript原始数据类型Symbol

    简介 创建symbol变量最简单的方法是用Symbol()函数.sysmbol变量有两点比较特别: 1.它可以作为对象属性名.只有字符串和 symbol 类型才能用作对象属性名. 2.没有两个symbol 的值是相等的. const symbol1 = Symbol(); const symbol2 = Symbol(); symbol1 === symbol2; // false const obj = {}; obj[symbol1] = 'Hello'; obj[symbol2] = 'W

  • JavaScript数据类型相关知识详解

    一.字面量 用于表达一个固定值的表示法,又叫做常量. 1.1 数字字面量 <script> // 整数字面量 // 十进制 console.log(12); // 八进制 console.log(010); // 十六进制 console.log(0x100); </script 效果展示 1.2 浮点数字面量 浮点数不区分进制,所有的浮点数都是十进制下的(注意:浮点数若是0~1之间的,前面的0可以省略不写,例如0.6可以写成.6)浮点数的精度远远不如小数. // 浮点数字面量 cons

  • JS中数据类型的正确判断方法实例

    目录 前言 typeof是否能正确判断类型? instanceof是否能正确判断类型? Object.prototype.toString.call() constructor Array.isArray() 正则判断 总结 前言 Javascript是一门动态类型的语言,一个变量从声明到最后使用,可能经过了很多个函数,而数据类型也会发生改变,那么,对一个变量的数据类型判断就显得尤为重要. typeof是否能正确判断类型? typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数

  • 利用JS判断数据类型的四种方法

    目录 前言 1.typeof 2.instanceof 3.constructor 细节问题: 4.toString 总结 前言 Javascript 中的数据类型判断其实是一个JavaScript非常基础问题,但不论是日常实际编程过程中和还是面试时,这都是一个非常常见的问题. 在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined.Null 引用类型:O

  • 一文带你走进js数据类型与数据结构的世界

    目录 1. 什么叫动态类型 2. 数据类型 2.1 原始类型(6 种原始类型,使用 typeof 运算符检查) 2.2 null 与 Object 2.3 typeof 操作符重点说明 3. 原始值 3.1 原始值基本概念 3.2 各类型说明 1. 什么叫动态类型 JavaScript 是一种弱类型或者说动态语言. 我们不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据 let a; // 初始不给任何类型 a = 11; // a此时

  • 一文带你走进js-数据类型与数据结构的世界

    目录 2. 数据类型 2.1 原始类型(6 种原始类型,使用 typeof 运算符检查) 2.2 null 与 Object 3. 原始值 3.1 原始值基本概念 3.2 各类型说明 1. 什么叫动态类型 JavaScript 是一种弱类型或者说动态语言. 我们不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据 let a; // 初始不给任何类型 a = 11; // a此时是number类型 a = "二大爷"; // a

  • 一文带你搞懂JS中六种For循环的使用

    目录 一.各个 for 介绍 1.for 2.for ... in 3.for ... of 4.for await...of 5.forEach 6.map 二.多个 for 之间区别 1.使用场景差异 2.功能差异 3.性能差异 三.for 的使用 for 循环在平时开发中使用频率最高的,前后端数据交互时,常见的数据类型就是数组和对象,处理对象和数组时经常使用到 for 遍历,因此下班前花费几分钟彻底搞懂这 5 种 for 循环.它们分别为: for for ... in for ... o

  • 做java这么久了居然还不知道JSON的使用(一文带你了解)

    JSON(JavaScript Object Notation, NS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的 文本格式 来存储和表示数据. 简洁和清晰的层次结构使得JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率. 在JavaScript语言中,一切都是对象.因此,任何JavaScript 支持的类型都可以通过JSON来表示,例如字符串.数字.对象.数组等.看看他的要求和语法格式: 对象表示为键值对

  • 一文带你彻底搞懂Lambda表达式

    1. 为什么使用Lambda表达式 Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升. 我们来看一下使用lambda之前创建匿名内部类: new Thread(new Runnable() { @Override public void run() { System.out.println("执行Runnable方法"); } });

  • 手把手带你走进Go语言之常量解析

    目录 概述 常量 常量计算 iota 概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 3 课) 常量 常量 (Constant) 是指程序在执行过程中不会改变的固定值. 常量可以是任何基本数据类型. 如整数常量, 浮点常量, 字符常量, 枚举常量. 常量一般都会被编译器视为常规变量, 只是常量的值不能再定义之后修改. 格式 1: const 变量名 = 值 格式 2: const 变量名 变量类型 例子: package main i

  • 手把手带你走进Go语言之语法基础解析

    目录 概述 Go 语法基础 关键字 标识符 数据类型 变量声明 多变量声明 值类型和引用类型 概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 2 课) Go 语法基础 Go 程序可以由多个标记组成: 关键字 标识符 常量 字符串 符号 关键字 Go 语言有 25 个关键字: 关键字 作用 var & const 变量和常量的声明 package & import 导入 func 用于定义函数和方法 return 用于函数返回 d

  • 手把手带你走进Go语言之类型转换

    目录 概述 数据类型转换 浮点转整数 字符串转整数 整数转字符串 概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. 数据类型转换 数据类型转换可以帮助我们将一种数据类型的变量转换为另外一个种类型的变量. 格式: type_name(expression) 浮点转整数 浮点转整数是从高精度向低精度转换, 小数点后面会被舍弃. 例子: package main import "fmt" func main() { // 定义float

  • 一文带你理解 Vue 中的生命周期

    目录 1.beforeCreate & created 2.beforeMount & mounted 3.beforeUpdate & updated 4.beforeDestroy & destroyed 5.activated & deactivated 前言: 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如需要设置数据监听.编译模板.挂载实例到 DOM.在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫做生命周期钩子的函数,给予用户

  • 一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用

    目录 函数式接口概述 函数式接口示例 1.Runnable接口 2.自定义函数式接口 3.作为参数传递 Lambda 表达式 内置函数式接口 Lambda简述 Lambda语法 方法引用 构造器引用 数组引用 函数式接口概述 只包含一个抽象方法的接口,称为函数式接口. 可以通过 Lambda 表达式来创建该接口的对象. 可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口.同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口.

随机推荐