JavaScript数据类型

2023-11-07

变量

1. 概述

变量(variables) 是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据,甚至数据可以修改。

变量相当于一个容器,内部可以存储任意类型的数据,使用变量时,用的是内部存储的数据

本质:变量是程序在内存中申请的一块用来存放数据的空间

2. 变量使用

变量在使用时,分为两步:声明变量、赋值

(1) 声明变量

例如:声明一个名称为age的变量: var age;

变量声明又叫做定义变量、创建变量。

变量在使用前,必须先有定义,如果没有定义,会出现引用错误

定义方法:使用一个 var 的关键字进行定义,后面必须加一个空格,空格后面自定义变量名

使用var关键字声明变量后,计算机会自动为变量分配内存空间

注意:现在不怎么使用var,es6基本都用const、let

(2) 变量赋值

例如:给age这个变量赋值为10:age = 10;(等号 = 左右习惯空格隔开)

变量定义之后,初始时没有进行赋值,内部有一个默认存储的值叫undefined(未定义),表示变量内部未赋值,可以存储数据了。

变量赋值的方式:通过等号 = 赋值,等号右边的值赋值给左边的变量

变量赋值时:内部可以存储任意类型的数据,甚至是一个变量。赋值过程中,等号右侧的变量使用的是存储的数据。

变量赋值的几种情况:

  • 变量参与赋值过程时,等号左变右不变

    var a;
    a = 3;
    var b;
    b = a + 3;
    
  • 变量的赋初值过程可以与声明过程写在一起。

    var c = 'hello';
    
  • 变量一次定义,可以多次等号赋值,原有的值被覆盖,以最后一次赋的值为准

    var c = 'hello';
    c = 3;
    c = c + 2;
    console.log(c);
    // 输出5
    
  • 一个关键字 var 可以同时定义多个变量,并且都赋初值。多个变量之间用英文逗号进行分隔,最 后一个变量后面使用分号进行结尾

    var a = 1, b = 2, c = 3;
    

(3) 变量的初始化

声明一个变量并赋值,称之为变量的初始化

(4) 变量命名规范

必须遵守的,否则报错

  • 由字母、数字、下划线、美元符号$组成,不能以数字开头
  • 字母区分大小写,A和a表示不同
  • 不能是关键字和保留字,关键字是指js中有特殊功能的小词语,比如 var、for 等
  • 保留字指的是现在没有特殊功能,但是将来新语法中有可能作为关键字使用。

建议遵守的,不遵守不会报错

  • 变量名必须有意义
  • 遵守驼峰命名法。多个单词组合而成的,第一个单词首字母小写,后面单词的首字母需要大写。 例如:userName、userPassword
  • 注意:尽量不要直接使用name作为变量名
案例1:弹出一个输入框,提示用户输入姓名,弹出一个对话框,输出用户刚才的姓名
var myname = prompt('请输入您的名字');
alert(myname);
案例2:交换两个变量a、b的值,(使用一个临时变量c来做中间存储)
var num1 = 'red';
var num2 = 'green';
var temp;
temp = num1;
num1 = num2;
num2 = temp;
console.log(num1, num2);

数据类型

1. 简介

在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型

数据类型就是数据的类别型号

2. 变量的数据类型

JavaScript 语言是一门动态类型的语言,变量并没有一个单独的数据类型,而是会随着内部存储数据的变化,数据类型也会发生变化。

在代码运行时,变量的数据类型是由JS引擎根据等号= 右边变量值的数据类型来判断的,运行完毕后,变量就确认了数据类型

var age = 18; // 这是一个数字型
var color = 'pink';  // 这是一个字符串

JavaScript拥有动态类型,同时也意味着相同的变量可用作不同的类型

var x = 6;  // x为数字
var x = 'pink';  // x为字符串

3. 数据类型分类

简单数据类型:Number、String、Boolean、Undefined、Null

复杂数据类型:Object

4. 检测数据类型

(1) 获取检测变量的数据类型

  • 使用 typeof 的方法进行数据检测。

  • 检测方式:在 typeof后面加小括号 () 执行,将要检测的数据放在小括号内部。

    console.log(typeof(1));  // number
    console.log(typeof(2.4));  // number
    console.log(typeof(Infinity));  // number
    console.log(typeof(NaN));  // number
    console.log(typeof('汉字内容'));  //string
    console.log(typeof(undefined));  //undefined
    console.log(typeof(true));  // boolean
    console.log(typeof(false));  // boolean
    console.log(typeof(null));  // object
    console.log(typeof(67 + 78));  //会运算后再判断为number
    
  • 也可以将 typeof 作为关键字,后面加空格,空格后添加数据的方式,检测数据。

    console.log(typeof 67);  // 建议用第一种
    console.log(typeof 67 + 78);  //一步步往后 输出numbe78
    

提示:也可使用谷歌浏览器控制台,快速的查看数据,字符串的颜色是黑色的数值类型是蓝色的布尔类型也是蓝色的undefined和null是灰色的

(2) 字面量

字面量(literal)是用于表达一个固定值的表示法,又叫常量。

通俗的理解,字面量就是所见即所得,js 程序执行到代码中的字面量,会立即知道它是什么类型的数据,值是多少。

可以用于表示固定值,比如:数字、字符串、undefined、布尔类型的字面值等

简单数据类型(基本数据类型)

1. Number数字型

包含整型值和浮点型值,如21,0.21,默认值是0

(1) 整数

整数可以被表示成十进制(基数为10)、八进制(基数为8)以及十六进制(基数为16)。

  • 十进制是最基本的数值字面量格式。
  • 八进制字面值必须带前缀0、0O、0o 。八进制整数只能包括数字0-7。
  • 十六进制的前缀是0x或0X。后面可以包含数字(0-9)和字母af或AF。

在进行算术计算时或者参与程序,所有八进制和十六进制的数字都会被转换成十进制。

特殊的:八进制中,如果以0开头,每个位数上有超过0-7之间的数字出现,也就是8/9,强 制忽视前面的0,直接将后面数字当做十进制

(2) 浮点数

  • 浮点数不区分进制,所有的浮点数都是十进制下的数字。
  • 注意:如果浮点数是大于0 小于1的,可以省略小数点前面的0不写。
  • 浮点数的精度问题:浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数(例0.1 + 0.2; 结果不是 0.3,而是:0.30000000000000004)
  • 科学计数法:e4相当于10的4次方(例如1.2e4 = 12000,1.2e-4 = 0.00012)

(3) 特殊值

  1. Infinity 无穷

    • 由于计算机计算能力有限,如果高于最大计算值直接显示为正无穷 Infinity,如果低于最小 计算值直接显示为 -Infinity。

    • 无穷大:Infinity

    • 无穷小:-Infinity

    • Infinity 本身就是一个数字。

      最小值:Number.MIN_VALUE,这个值为: 5e-324

      最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308

  2. NaN

    • not a number表示不是一个正常的数,但是还是一个 Number 类型的数字。这个数字没办法用前面的表示方法表示。
    • NaN 与任何值都不相等,包括他本身。
    • isNaN(): 判断一个数据是不是一个NaN,若是数字返回false,若不是数字返回true

2. String字符串型

字符串是由任意个数的有序或无序的字符组成的串

组成:字母、汉字、特殊符号、空白等。

字符串字面量写法:是用一对单引号(’ ')或双引号(“ ”)及引号内的字符构成,引号中间的字符可以有任意多个,也可以是没有字符的空字符串。

注意:字符串中如果字符包含了双引号,则其外部应该由单引号标示,反之相同(外双内单 / 外单内双)

引号中间添加空格时叫空白字符串,引号中间没有字符叫空字符串

(1) 字符串转义字符\

字符串中,有一些特殊功能的字符不能直接书写,还有一些特殊效果不能直接书写,这时,可以使用转义符 \ 对这些字符进行转义。

转义字符都是以 \ 开头,常用的如下(转义字符要写到引号里面):

\n ——换行符 、 \a ——响铃

\\ ——反斜杠 、 \f ——换页

\’ ——单引号 、 \r ——回车

\" —— 双引号 、 \v ——垂直制表

\t ——tab缩进,水平制表 、 \0 ——空字符

\b ——空格,blank 、 \e ——转义

###(2) 字符串长度

字符串是由若干个字符组成的,这些字符的数量就是字符串的长度

通过字符串的length属性可以获取整个字符串的长度

var str = 'my name is andy';
console.log(str.length);
// 输出15 空格也是一个字符

(3) 字符串拼接

多个字符串之间可使用“+”进行拼接,即字符串+任何类型=拼接之后的新字符串

拼接前会把与字符串相加的任何类型转为字符串,再拼接成一个新的字符串

// 字符串“相加” 
alert('hello' + '' + 'world');  // 输出hello world
// 数值字符串“相加” 
alert('100' + '100');  // 输出100100
// 数值字符串+数值
alert('11' + 12);  // 输出 1112

加号总结口诀:数值相加,字符相连

(4) 字符串拼接加强

我们经常会将字符串和变量来拼接,因为变量可以很方便的修改里面的值

变量是不能添加引号的,因为加引号的变量会变成字符串

若两侧都有字符串拼接,口诀:引引加加,删掉数字,变量写加号中间

var age = prompt('请输入您的年领');
var str = '您今年已经'+age+'岁了';
alert(str);

3. Boolean布尔型

布尔型有两个值:true和false,必须是小写字母,其中true真(对)、false假(错)

布尔型和数字型相加时,true的值为1,false的值为0

4. Undefined

undefined 本身是一个数据,表示未定义。

一个声明后没赋值的变量会有一个默认值undefined(进行相连/相加时,注意结果)

undefined和数字相加,最后结果为NaN

var variable;
console.log(variable); // 输出undefined
console.log('你好' + variable);  // 输出你好undefined
console.log(12 + variable);  // 输出NaN
console.log(true + variable);  // 输出NaN

5. Null

null 本身是一个数据。

从逻辑角度,null 值表示一个空对象指针。

如果定义的变量准备在将来用于保存对象,最好将该变量初始化为 null

一个声明变量给null值,里面存的值为空

var vari = null;
console.log('你好' + vari);  // 输出你好null
console.log(12 + vari);  // 输出12
console.log(true + vari);  // 输出1

数据类型转换

把一种数据类型的变量转换成另外一种数据类型

例如:使用表单input、prompt获取的数据默认是字符串型的,此时不能直接加法运算,就需要转换变量的数据类型

1. 转换为字符串类型

  • 数据.toString() 方法

  • 强制转换:String(数据) 方法,有些值没有toString(),这个时候可以使用String()。比如:undefined和null

  • 隐式转换:+ 号拼接字符串方式 (和字符串拼接的结果都是字符串)

    var num = 10;
    console.log(num + '');  // 输出字符串10
    

2. 转换为数值类型

parseInt() 方法:字符串转整数方法

  • 作用:第一,对浮点数进行取整操作;第二,将字符串转为整数数字。
  • 对数字取整功能,直接舍弃小数部分,只保留整数
  • 将字符串转为整数数字,也包含取整功能。
  • 字符串中,必须是纯数字字符串或者数字字符开头的字符串,才能转换为正常数字,且只取整数部分, 如果不是数字打头的字符串,会转换为 NaN
console.log(parseInt('3.14')); // 3取整
console.log(parseInt('3.94')); // 3取整(不四舍五入,只取整数)
console.log(parseInt('120px')); // 输出120
console.log(parseInt('rem120px')); // 输出NaN,因为一步步往后,而刚开始r是字母
console.log(Number('12')); // 输出12数值型

parseFloat() 方法:字符串转浮点数方法

  • 作用:将字符串转为浮点数数字。
  • 要求:满足浮点数数字字符必须在字符串开始,如果不在开始返回值都是NaN

Number() 强制转换方法:字符串转数值型

  • 可以用于任何数据类型
  • 字符串:纯数字字符串转为对应数字,空字符串和空白字符串转为 0 ,非空非纯数字字符串转为 NaN。
  • 布尔值:true 转为 1,false 转为 0。
  • undefined:转为 NaN。
  • null:转为 0。

JS隐式转换(- * /):利用算术运算符隐式转换为数值型(不包括加号)

console.log('123' + '120'); // 输出123120,所以不包括加号
console.log('123' - '120'); // 输出3
console.log('12' - 0); // 输出12
console.log('123' * 1); // 输出123

案例:计算2个数相加的结果

var num1 = prompt('输入第一个值');
// 也可写成 var num1 = parseFloat(prompt('……'));
var num2 = prompt('输入第二个值');
var result = parseFloat(num1) + parseFloat(num2);
alert('结果是'+ result);

3. 转换为布尔型

Boolean(数据) 方法

转型函数 Boolean() 可以用于任何数据类型,将其他数据类型转为布尔类型的值。

  • 转为 false :NaN、0、“”空字符串、null、undefined

  • 转为 true :非0 非NaN数字、非空字符

解释型语言和编译型语言

1. 概述

编程语言——翻译器——机器语言(二进制)

  • 翻译器翻译的方式有两种:编译(Java~)、解释(JS)
  • 编译器在代码执行之前进行编译,生成中间代码文件
  • 解释器在运行时进行及时解释,并立即执行(当编译器以解释方式运行时,也称为解释器)

2. 执行过程

Java(login.java) ——Javac.exe编译——中间代码文件login.class ——运行时编译——机器语言

JS(login.html) ——JS引擎解释—— 机器语言——执行

标识符、关键字、保留字命名规范

1. 标识符

标识(zhi)符:指开发人员为变量、属性、函数、参数取的名字

不能是关键字或保留字

变量、函数的命名必须有意义;变量名称一般用名词,函数名称一般用动词(例如:getSum)

2. 关键字

指JS本身已经使用了的字,不能再用它们充当变量名、方法名

包括:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、instanceof、new、return、switch、this、throw、try、typeof、var、void、while、with等

3. 保留字

实际上就是预留的关键字,意思是现在虽然不是关键字,但是未来可能会成为关键字,同样不能使用它们当变量名或方法名

包括:boolean、byte、char、class、const、debugger、double、enum、export、extends、fimal、float、goto、implements、import、int、interface、long、mative、package、private、protected、public、short、static、super、synchroized、throws、translent、volatile等

parseInt() 的第二个参数

parseInt() 作用:第一,对浮点数进行取整操作;第二,将字符串转为整数数字。

特殊的:方法有第二个参数,值为 2-36 之间的整数,表示的是进制

注意事项1:

如果没有第二个参数:

  • 如果出现以 0x/0X 开头的字符串,会自动按照对应的十六进制转为整数。
  • 如果出现以 0/0o/0O 开头的字符串,ES3 中会按照八进制进行转换,而ES5 中默 认按照十进制转换。
  • 如果出现以其他字符开头的字符串,都按照十进制进行转换。

因此,为了避免解析的不一致问题,要指定第二个参数进制

// 第一步:将 “123” 的字符串,转换成八进制的 123 数字
// 第二步:将 八进制的 123 ,转为十进制
console.log(parseInt("123",8));  // 83

// 没有第二个参数
// 0x 开头,强制使用十六进制进行转换
console.log(parseInt("0x123"));  // 291

// 0/0o 开头,ES3 中按照八进制,ES5 按照十进制
console.log(parseInt("0123"));  // 123
console.log(parseInt("0o123"));  // 0

// 其他字符开头,按十进制
console.log(parseInt("0Xa123", 16));  // 41251
console.log(parseInt("ga123", 16));  // NaN

// 字符串需要按照对应的前缀进行书写,可以正常按照对应的进制进行转换
// 也可以不写前缀,也会按照指定进制进行转换
console.log(parseInt("789",8));  // 7
console.log(parseInt("0789",8));  // 7
console.log(parseInt("98",8));  // NaN
console.log(parseInt(Infinity,10));  // NaN
console.log(parseInt("123.45",8)); // 八进制的 123,转为十进制 83 输出
console.log(parseInt("123.45",2)); // 二进制的 1,转为十进制的1 输出
console.log(parseInt(56,3)); // NaN

console.log(parseInt(0x1f, 16)); // 49,只要是数字,参与程序之前都要转成十进制:0x1f →转成十六进制→ 31 →转成十进制→ 49 
console.log(parseInt(31, 16)); // 49,第一步转成了十六进制的31,输出前要再次转成10进制

注意事项2:

由于某些数字在其字符串表示形式中使用 e 字符(例如 6.022e23 或者6.022e-23),因此当对非常大或非常小的数字使用数字时,使用 parseInt 截断数字将产生意外结果。 parseInt不应替代Math.floor()

console.log(parseInt(6.7, 10));  // 返回6

console.log(parseInt(640000000000000000000000000000000000000000000,10));   // 非常大的数值参与程序时,会转变成e计数法形式, 即最后会对6.4e+44这个字符串进行取取整,十进制取整时只会保留小数点前面的数字,所以返回6

console.log(parseInt(0.000000000006022,10));  //非常小的数值参与程序时,也会转变成e计数法形式,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript数据类型 的相关文章

随机推荐

  • C#集合总结

    1 为什么引入集合 因为数组长度是固定的 为了建立一个动态的 数组 所以引入了集合 2 为什么引入ArrayList 非泛型集合 ArrayList可以填补数组的不足 进行元素的动态维护 数组的长度是固定的 而ArrayList的容量可以根
  • Android WebSocket状态管理框架 - WebSocketGo

    阅读本文需要 Integer MAX VALUE 分钟 故事背景 笔者所在的公司主营业务是智能家居 笔者在公司负责的Android端App的开发 关于智能家居 估计现在百分之八九十的童鞋都听过 但真正了解或者使用过的估计就不占多数了 本文不
  • 基于Python+WaveNet+CTC+Tensorflow智能语音识别与方言分类—深度学习算法应用(含全部工程源码)

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 Python 环境 Tensorflow 环境 模块实现 1 方言分类 数据下载及预处理 模型构建 模型训练及保存 2 语音识别 数据预处理 模型构建 模型训练及保存 3 模型测试
  • ESXI使用shell查看虚拟机

    1 按F2登录 选择Troubleleshooting Options 2 选择Enable ESXi Shell 回车启动Shell 3 返回登录界面 按Alt F1 进入Shell 4 输入用户名和密码登录 5 查看虚拟机清单 vim
  • SQL中 EXISTS 的用法简介

    EXISTS 作用是判断某个对象是否存在 常用于判断表或在WHERE子句等条件中使用 分别介绍如下 1 可以判断某个表或某对象是否存在 if exists select from sys tables where name xTable p
  • Eclipse设置:背景与字体大小和xml文件中字体大小调整

    Eclipse中代码编辑背景颜色修改 代码编辑界面默认颜色为白色 对于长期使用电脑编程的人来说 白色很刺激我们的眼睛 所以改变workspace的背景色 可以使眼睛舒服一些 设置方法如下 1 打开window Preference 弹出Pr
  • VMware虚拟机安装win10系统教程(超详细)

    VMware虚拟机安装win10系统教程 1 在VM中的安装与设置 1 1创建新的虚拟机 1 2典型 自定义 1 3选择客户机操作系统 1 4位置和命名 1 5指定磁盘容量 1 6确认界面 1 7虚拟机设置 2 win10系统界面的配置 2
  • 【深度学习】语义分割 PASCAL Context 数据集

    数据集介绍 PASCAL Context数据集 1 由两部分组成 PASCAL VOC 2010 语义分割数据集 Context 标注 PASCAL Context 总共有459个标注类别 包含 10103 张图像 其中 4998 用于训练
  • Java Swing实现美化版绘图工具

    美化版画图工具功能模块分析 gitee https gitee com Guo HongYan javaShape git github https github com 229976762 Java git aliyun https ww
  • R语言基础4 (R运算符)

    R运算符 算数运算符 算数算符 算符含义 乘幂 乘 除 加 减 模运算 取余数 整数除法 例子 gt a lt 10 gt b lt 2 gt c lt 3 gt a b 1 100 gt a b 1 20 gt a c 1 3 33333
  • pc端和移动端抓包工具

    客户端与服务器端 CydiaSubstrate框架 Frida Native层HOOK Frida hook Java层 需要相关资料的朋友 可以 加入此处即可打包获取 一 抓包工具概述 http https fiddler burpsui
  • ssl证书过期;申请以及Nginx配置。

    1 登录阿里云 工作台找SSL证书或者安全下找CA证书 2 点击创建证书 或购买证书 创建好以后点击证书申请 3 设置配置以及域名信息 仅填写圈住内容 其他默认即可 4 随后等待一会 查看状态 是否为 已签发 5 为已签发时 点击下载选择下
  • Linux — 【进程信号】

    目录 一 信号的概念 那么生活中的信号有哪些呢 如何把上面的概念迁徙到进程中呢 signal函数 二 信号的产生 1 通过终端按键产生信号 2 调用系统函数向进程发信号 kill函数 raise函数 abort函数 3 硬件异常产生的信号
  • Django Vue corsheaders跨域问题

    跨域问题 记录一下在我自己的django vue项目里面出现的跨域问题 我的项目之前一直是在本地跑的 因为需要上线测试 所以我就运行在同一个vlan里面 ip段 192 168 1 0 24 突然发现存在跨域问题 我django的接口访问被
  • CC2530定时器使用笔记

    最近在用2530的定时器做捕捉和生成pwm 其中一块2530负责捕捉 另一块2530负责生成pwm 整理下笔记 方便以后查阅 一 普通定时 使用定时器来定时将tick自加 获得更精确的时间 代码如下 在其他地方将系统的时钟配置了32M 此处
  • BES提示音修改实验

    加v hezkz17 进数字音频系统答疑群 1 普通提示音切换需要注意的 比如切换不同的音频信号源注意先要app audio list clear 然后再切换音频app audio manager sendrequest APP BT ST
  • Vuex状态管理器

    目录 1 什么是vuex 2 vuex的使用场景 3 vuex的工作方式 4 vuex的核心API 1 state 2 mutations 3 actions 通过actions去触发mutations中的方法 实现对state的异步修改
  • 微信小程序的使用教程

    一 首先我们要去安装一个微信开发者工具 微信开发者工具下载 二 注册一个微信小程序 生成ID 注册链接 注册好之我们打开开发管理 开发设置 复制App的ID 三 打开微信开发者工具 按图示填写完整之后 我们点击确定 这样你就创建好了一个小程
  • Windows安装GPU环境CUDA、深度学习框架Tensorflow和Pytorch

    Windows安装GPU环境CUDA 深度学习框架Tensorflow和Pytorch 1 未安装CUDA使用tensorflow报错 import tensorflow as tf 2022 03 06 15 14 38 869955 W
  • JavaScript数据类型

    变量 1 概述 变量 variables 是计算机内存中存储数据的标识符 根据变量名称可以获取到内存中存储的数据 甚至数据可以修改 变量相当于一个容器 内部可以存储任意类型的数据 使用变量时 用的是内部存储的数据 本质 变量是程序在内存中申