js基本七种数据类型_js原始数据类型

js基本七种数据类型_js原始数据类型Js中的数据类型虽然也是一个老生常谈的问题,但它经常出现在整个面试的前几问中,面试官会通过你的回答来决定之后问题的走向,比如当你回答基本数据类型时少回答了一个String时,那么面试官很可能就会问你String都有哪写方法哦~

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

JavaScript中的基本数据类型

JavaScript基础提升合集

?包含this、call、原型链、作用域等基础经典知识点
☕️每周一篇,打好基础,爬升不累
?最全知识点解析,易懂的代码示例收藏、订阅方便阅读
?完整版在线阅读,猛戳这里~

目录:

一、类型

可能许多习惯了C++、C#这类静态语言(强类型)语言的小伙伴们在编写Js代码时,会很不习惯,因为相对于静态语言来说,Js甚至没有类型的”概念“。

而且Js中吐槽较多的恰恰就包含类型转换,在我们日常写代码时总是遇到或显示或隐示的类型转换,比如:

你要获取数字123的个位十位百位,你会怎么做?

  • toSrting()后通过下标获取?
  • 取整取余?

使用类型转换形式多样。有些方式简明易懂,也很安全,然而稍不留神,就会出现意想不到的结果。

为了学习和掌握类型转换,现在先让我们来深入了解一下值和类型。

内置类型

JavaScript 拥有动态类型,这意味着相同的变量可用作不同的类型:类型是值的内部特征,它定义了值的行为,以使其区别于其他值。

JavaScript中的内置类型:

  • null
  • undefined
  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(Object)
  • symbol(ES6新增)

对于null和undefined大家一定不陌生,我们会在第三节简单的分析他们之前的区别。

在这里插入图片描述

二、数据类型分类

除了对象,其他几个都是基本类型,这是因为声明变量时不同的内存分配而决定的:

2.1 基本类型

JavaScript 中共有 6 种基本数据类型:UndefinedNullBooleanNumberStringSymbol

基本类型存储在栈(stack)中,也就是说:

  • 它们的值直接存储在变量访问的位置
  • 这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 – 中。
  • 这样存储便于迅速查寻变量的值。
  • 基本类型的值是按值访问的,且基本类型的值是不可变的。
var str = "123hello321";
str.toUpperCase();     // 123HELLO321
console.log(str);      // 123hello321

Jetbrains全家桶1年46,售后保障稳定

基本类型的比较是它们的值的比较:

var a = 1;
var b = true;
console.log(a == b);    // == 只进行值的比较
console.log(a === b);   // === 不仅进行值得比较,还要进行数据类型的比较

有关符号运算,优先级的问题,我觉得应该将它放在Js专题系列,单独讨论它们才能比较透彻,这里就不过多解释了。

来看下面的代码,我们用图示来分析它

var a,b
a = 100;
b = a;
a = '字符串';

在这里插入图片描述

2.2 引用类型

引用类型存储在堆(heap)中的对象,也就是说:

  • 存储在变量处的值是一个指针(point),指向存储对象的内存地址。
  • 引用类型的值是按引用访问的,且引用类型的值是可变的。
  • 变量存储的是可以打开保存数据的房间的钥匙
  • 存储钥匙地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。

除过上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型。细分的话,有:

  • Object
  • Array
  • Date
  • RegExp
  • Function

引用类型的比较是引用的比较:

var obj1 = { 
   };    // 新建一个空对象 obj1
var obj2 = { 
   };    // 新建一个空对象 obj2
console.log(obj1 == obj2);    // false
console.log(obj1 === obj2);   // false

因为 obj1 和 obj2 分别引用的是存放在堆内存中的2个不同的对象,故变量 obj1 和 obj2 的值(引用地址)也是不一样的!

来看下面的代码,我们用图示来分析它

var a = { 
    name: '余光' };
var b;
b = a;
a.name = "yuguang";
b.age = 23;
var c = { 
   
  name: '余光',
  age: 23
};

在这里插入图片描述

2.3 小结

基本类型

  • 栈内存中包括了变量的标识符和变量的值

引用类型

  • 栈内存中保存了变量标识符和指向堆内存中该对象的指针
  • 堆内存中保存了对象的内容

在这里插入图片描述

三、常见问题

3.1 JavaScript中的变量是没有类型的

来看下面的例子:

var a = 100; // 严格地说 变量a没有类型,它所保存的 100是数字类型的
typeof a === 'number'; // 其实检测是=>typeof 100

a = 'string'
typeof a === 'string'; // true

变量a可以随时持有任何类型的。换个角度来理解就是,JavaScript不做“类型强制”;也就是说,语言引擎不要求变量总是持有与其初始值同类型的值。

3.2 typeof检测不总是对的

在这里插入图片描述

需要注意的点:

number

// 基本数学API和属性
typeof Math.LN2 === 'number'; // true Math的属性
typeof Infinity === 'number'; // true 无穷
typeof NaN === 'number'; // true 特殊的数字类型,not a number
// 被强转称数字的其他数据类型
typeof Number('str') === 'number'; // Number('str') => NaN => number

string

typeof (typeof 1) === 'string'; // typeof always returns a string
typeof String(1) === 'string'; // 强转成字符串

布尔值

typeof Boolean(1) === 'boolean'; // 强制类型转换
typeof !!(1) === 'boolean'; // two calls of the ! (logical NOT) operator are equivalent to Boolean()

Symble

typeof Symbol() === 'symbol'
typeof Symbol('foo') === 'symbol'

undefined

一个没有被赋值的变量的数据类型是undefined(如果方法或者是语句中操作的变量没有被赋值,则会返回undefined) —— MDN

typeof undefined === 'undefined';

object

typeof { 
    name: '余光' } === 'object';

null

值得我们注意恰恰是这个null,typeof 对它的处理返回的是object

typeof null === 'object'; // true

function

typeof检测函数返回的也是object,这是因为从规范上看function实际上是object的一个子类型。

// Functions
typeof function() { 
   } === 'function';
typeof class C { 
   } === 'function';

那么你还知道其他检测数据类型的方式吗?

3.3 null和undefined

  • null:特指对象的值未设置。它是 JavaScript 基本类型 之一。
    • 它不是全局对象的一个属性;
    • 在 API 中,null 常在返回类型应是一个对象,但没有关联的值的地方使用。
  • undefined:表示声明但未被赋值的变量类型
    • 你可以使用undefined和严格相等或不相等操作符来决定一个变量是否拥有值。

他们的区别:

当检测 null 或 undefined 时,注意相等 =====两个操作符的区别 ,前者会执行类型转换:

  • typeof检测时两者的返回值不同
  • 代表的含义不同
typeof null        // "object" (因为一些以前的原因而不是'null')
typeof undefined   // "undefined"
null === undefined // false
null  == undefined // true
null === null // true
null == null // true
!null //true
isNaN(1 + null) // false
isNaN(1 + undefined) // true

写在最后

目前,前端内功系列已经是第九篇了,虚心接受大家的批评和指正,如果能对您有帮助,希望您关注、收藏、点赞一波哦~

热门开源-欢迎star支持

关于我

  • 花名:余光
  • Writing Vue and JavaScript
  • Working at GaoDing Design
  • A console log tester

如果您看到了最后,不妨收藏、点赞、评论一下吧!!!
持续更新,您的三连就是我最大的动力,虚心接受大佬们的批评和指点,共勉!

js基本七种数据类型_js原始数据类型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/213458.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【基础数学】单射、满射和双射的定义、区别[通俗易懂]

    【基础数学】单射、满射和双射的定义、区别[通俗易懂]满射:对任意b,存在a满足f(a)=b~即:值域y是满的,每个y都有x对应,不存在某个y没有x对应的情况~单射:(one-to-onefunction)一对一函数,x不同则y不同~即:没有一个x对应两个y,也没有一个y有对应两个x~双射:既是满射,也是单射~即:每个y都有x对应,而且都是一一对应~…

  • python语言变量命名规则有什么_Python变量命名规则(超级详细)

    python语言变量命名规则有什么_Python变量命名规则(超级详细)Python需要使用标识符给变量命名,其实标识符就是用于给程序中变量、类、方法命名的符号(简单来说,标识符就是合法的名字)。Python语言的标识符必须以字母、下画线(_)开头,后面可以跟任意数目的字母、数字和下画线(_)。此处的字母并不局限于26个英文字母,可以包含中文字符、日文字符等。由于Python3支持UTF-8字符集,因此Python3的标识符可以使用UTF-8…

  • 过滤器和拦截器的区别和执行顺序图_压缩空气过滤器安装顺序

    过滤器和拦截器的区别和执行顺序图_压缩空气过滤器安装顺序一、两者的区别1、拦截器java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP(Aspect-OrientedProgramming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作…

  • matlab超前滞后校正装置设计_matlab劳斯判据

    matlab超前滞后校正装置设计_matlab劳斯判据且1引言不确定性与时滞是工业过程中普通存在的现象,这使得系统的分析与综合变得更加复杂和困难,同时也是导致系统不稳定和性能恶化的主要因素.因此,对不确定时滞系统的鲁棒控制问题进行研究,具有重要的理论意义和实际应用价值.近年来,不确定时滞系统的稳定性研究得到了广泛的关注匡5}.中立时滞系统作为一类非常重要的控制系统,其稳定性研究己有不少有价值的结论{3一11}.中立时滞系统的稳定条件可分为两大类:时滞…

  • 范数对于数学的意义?1范数、2范数、无穷范数

    作者:JIWeiwei链接:https://www.zhihu.com/question/21868680/answer/25599956来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:Faaany链接:https://www.zhihu.com/question/21868680/answer/136376374来源:知乎著作权归作者所有。商业转载请联系作者…

  • IOS本地化应用

    IOS本地化应用

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号