酷游浅谈网站Javas cript型别

news2024/12/25 15:39:52

最近整理了一下,【酷游娜娜手机𝕍找看看nay3989提供】就决定跟大家讨论一下最近对于Javascripet的型别认识。

 

弱型别VS 强型别

Javascripet是一种「弱型别」的语言,所以会产生很多你意想不到恶心的事情

至于什么是弱型别?

小弟弟我来为大家解释一下,在程式语言的世界里有分两种型别系统

1.强型别(程式所定义的变数型别=变数在执行的型别)
这类型的程式语言在宣告变数的时候就已经把资料型别指定好给变数,如果对这个变数去做错误的型别运算他就会直接显示错误给你看。

举个例子来说,以下是一段ruby的程式码

a=2
b='3'
puts a+b #会显示错误

因为ruby是一种强型别的语言,上面的程式码一定会给你这段

String can't be coerced into Integer (TypeError)
大概的意思就是说不能将一个字符串强制转换为整数

2.弱型别(语法简洁,但是要注意型态转换会产生非预期的错误)
以下是一段Javascripet的程式码

const a = 2;
const b = '3';
console.log(a+b); //会出现5

Javascripet会判断你使用到+号是要做运算,并透过自动转型的特性去把字串型别转换成数字。

接下来就是重头戏啦,在javascript的世界中只有分基本型别(Primitives)跟物件型别(Object)两大类。如果想要确认型别可以透过typeof()来确认。

基本型别

有六种资料型别是基本型别:Boolean、Null、Undefined、Number、BigInt、String、Symbol(于EC6加入)。

字串(string)

字串其实就是字元的集合,字元代表一个字母的意思。字串就是一个单词的概念。举个例子:A是字元Apple是字串,
但在Javascript的世界里没有字元的概念,只有字串。字串会用' '(单引号)或是" "(双引号)包住,切记不可以混用单引号开头就是单引号结尾。以下用程式码示范:

const str = 'hello world';
const str2 = "这是一个字串";

单引号内如果有用到单引号或双引号内有用到双引号会出错

const str = 'I'm 18 year-old' //出错!

但如果改成这样

const str = "I'm 18 year-old"; 

如果有非用不可的状况就可以用跳脱字元(escape character)来处理

const str = 'I\'m 18 year-old'; 

如果想要连接字串可以使用加号

const str = 'hi!' + 'I am Eazy';

这边补充一下ES6后加入的新语法``反引號(backtick)这个超好用的东西,可以让你在字串中直接塞变数不用在透过加号也可以让你直接支援多行字串。这边就不啰唆直上程式码

const age = 18;
const str = ` hello word ! I am  ${age} year-old `; 
console.log(str); //可以印出 hello word ! I am 18 year-old 

 

数字(Number)

Javascript只有一种数值的型别,那就是Number。不管是整数(integer)或是带有小数点的浮点数字都是属于这一类:

const a = 10;
const b = 12.2;

除了整数与小数外,额外还有几种特殊的数字:Infinity(無限大)-Infinity(負無限大),以及NaN(Not a Number)
如果用一个正数除以0会得到Infinity(無限大),用负数除以0会得到-Infinity(負無限大),那如果用0/0会得到NaN。Infinity/Infinit或Infinity(负无限大)/-Infinity(负无限大)都是NaN。

最好玩的是NaN并不等于NaN。
如果你拿NaN去跟任何数字做运算也只会得到NaN,所以它就是一个数字型别来代表不是数字。
Javascript里还有一个特别的状况那就是小数点运算,它是基于二进位浮点数算术标准(IEEE 754)

提供个例子:

0.1+0.2 === 0.3 //false 

布林值(boolean)

相对其他基本型别,布林值就很简单只有两种,不是true就是false。通常会用在判断式if...else用来作流程控制。

空值(null)

在多数程式语言都有一个这样的设计来代表空值,在Ruby的世界里是用nil。null型别就只有一个值就是null。
如果要比较饶舌的解释,Null就是「这个变数(可能曾经有值,也可能没有)但是现在起他就是没有值。」如果要使用null可以直接宣告,以下:

const a = null;

Number(null); //用强制转型会跑出0

如果用typeof()去检查Null会发现他会跳出Object,其实他是一个美丽的错误漏洞,因为在Javascript的初期实作中,Javascript的值是用「型别」的标签与实际内容的值来组成。由于Object这型别的标签是0,所以跟null的标签(惯例会以0x00表示)搞混后导致有这样的错误结果。

const a ;

console.log(a); //会跑出undefined

Number(undefined); // NaN

但还有一个会出现的东西叫not defined,在你还没宣告变数就使用它会出现

console.log(b); //not defined

可以预设JS会给变数预设的值,就是undefined。这后面可以再出一篇文章细谈JS宣告变数后有分建立期執行期

BigInt(超大整数)

Javascript用来表示值太大而无法用Number表示的数值。JavaScript是双精度浮点会留一个位置给科学记好左边的1,所以Number最大安全表示是2的53次方-1=9,007,199,254,740,991。

const previouslyMaxSafeInteger = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991); // 9007199254740991n

const hugeString = BigInt("9007199254740991"); // 9007199254740991n

所以超过这9,007,199,254,740,991,会加上bigint但是只能表示整数。

symbol(象征)

Javascript称为Symbol值或只是一个Symbol,每一个Symbol的值都是独一无二的。是ES6后新出的语法。

物件型别(Object)

在Javascript中,除了基本型别外都可以归类在物件型别。那什么是物件呢?以下就来整理一下物件型别有哪些。

物件

一个物件可以是个零或是多种属性的集合。基本属性上是一组Key跟value的组合而成,一个属性的值可以是某个基本型别,也可以是物件或是一个函数。如果要宣告一个物件可以直接用{}来宣告。

const cat = {
  name: '小橘',
  age: 6,
  action: function(){
    console.log('吃饭');
  }
};

如果要将物件的属性存取可以透.或是[ ]来存取,以下用上面的物件示范

const cat = {
  name: '小橘',
  age: 6,
  action: function(){
    console.log('吃饭');
  }
};

cat.name // '小橘‘
cat["age"]  // 6

物件并没有先后顺序,所以如果你想要获取value,可以直接透过key来取得。

阵列(Array)

阵列也是一种物件型别,同样是多个元素的集合体。所以一样可以放基本型别、阵列、物件、函式。但是阵列与物件的差别在于阵列是有顺序的集合体。透过[ ]加上索引值(index),索引值(index)是由0开始。宣告一个阵列很简单以下:

const a = [1, 2, 3];

console.log(a[0]); //可以拿到1

阵列也有很多方法可以使用,之后也可以整理出来在细谈这边就不在多赘述。

函式(function)

函式在javascript中也是物件型别,函式的概念有点像是我们在国中在使用的f(x)=2x+1(有参数跟引数)。
在javascript中宣告函式的方法有很多种,但不管是哪种方法,通常函式都会拥有三个部分:

  • 函式的名称(也可以不用)
  • 参数(arguments)(可以有多个参数会用,隔开)
  • 要重复执行的程式码
  • 要使用函式直接呼叫函式的名称即可
function addNumber(number1, number2){
  return number1 + number2;
}

addNumber(1, 2);   //3
addNumber(2, 4);   //6
addNumber(4, 5);  //9

切记要在透过return回传结果,不然会返还undefined
不然会像以下这个例子这样

function echoNumber(x){
  console.log(x);
}

echoNumber(1); ///会跑出两个结果 一个是1 一个是undefined

为什么要写function?假设当有一段程式码你会一直重复使用到你就可以考虑写成一个function

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/496214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试、测试和开发、测试和调试【详细介绍】

目录 一、什么是软件测试 1.软件测试的定义 2.软件测试的目的 3.软件测试的不可穷性 二、开发和测试的区别 三、测试和调试的区别 一、什么是软件测试 在日常生活中,测试是无处不在的。比如新买的手机是否好用、新买的衣服穿着是否合身等等场景,均…

点成案例丨细胞培养芯片用于构建肠模型实例分享

器官芯片是一种利用微芯片制造技术制造的微流体细胞培养设备。该设备包含多个连续灌注腔室,具有多细胞层结构、组织界面、物理化学微环境以及人体血管循环等特征,可以模拟和重构人体器官的生理功能,为相关研究提供了可靠的平台。器官芯片技术…

java中设计模式总结

设计模式是实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four (GoF) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。 有一些重…

【6D位姿估计】Point Pair Feature (PPF)

论文链接:Drost et al. Model Globally, Match Locally: Efficient and Robust 3D Object Recognition. CVPR, 2010. Model Globally, Match Locally 论文名字用 4 个词高度总结了 PPF 算法的精髓:“整体建模,局部匹配”。 下面这张图反应了论文的基本思想(算法概要): …

【鸿蒙应用ArkTS开发系列】- 导航栏Tab组件使用讲解

目录 Tabs介绍Tabs使用例子TabBar 样式设置定义菜单样式对象-NavigationItem定义一个底部菜单栏集合数据-NavigationList修改TabBuilder Tab 组件控制题外话 现在市场上的大部分应用,主页都是才用底部导航栏菜单作为页面主体框架来展示, 在鸿蒙中是使用…

STM32库函数笔记分享

之前刚开始自学的部分STM32笔记放出,希望对新入门STM32和想要复习库函数的小伙伴们起到帮助。 建立工程 1.寄存器操作方式 需要不断地查手册来了解每一位是干什么用的 优点:代码简介; 缺点:不太方便。 2.库函数操作方式 1.调用库函…

【leetcode热题100】接雨水、直方图最大矩形面积、矩阵中最大的矩形

文章目录 一、接雨水方法一:按列求(动态规划)方法二:双指针方法三:单调栈 二、直方图最大矩形面积单调栈哨兵位优化 三、矩阵中最大的矩形前缀和单调栈 一、接雨水 题目链接 题目描述: 给定 n 个非负整数…

JVM_垃圾回收器

目录 一、GC分类1.串行vs并行2.并发式vs独占式3.压缩式vs非压缩式4.年轻代vs老年代 二、GC评估指标1.吞吐量2.暂停时间3.小结 三、垃圾回收器都有哪些?1.GC发展史2.7种GC组合关系?3.为什么这么多GC4.如何查看默认GC?5.Serial GC:串行回收5.1…

字符设备驱动开发实验

我们以 chadev 这个虚拟设备为 例,完整的编写一个字符设备驱动模块。chadev 不是实际存在的一个设备,是为了方 便讲解字符设备的开发而引入的一个虚拟设备设备有两个缓冲区,一个为读缓冲 区,一个为写缓冲区,这两个缓冲…

Spring事务隔离级别详解

Spring有五大隔离级别: 1、ISOLATION_DEFAULT 2、ISOLATION_READ_UNCOMMITTED 3、ISOLATION_READ_COMMITTED 4、ISOLATION_REPEATABLE_READ 5、ISOLATION_SERIALIZABLE ISOLATION_DEFAULT 用底层数据库的设置隔离级别。 ISOLATION_READ_UNCOMMITTED 一个事…

java 数组创建的方法

数组是一个由一组元素组成的集合,我们可以用一个数组来表示集合。 java中最基本的数据类型是字符串,其长度是固定的,且不可变,一个字符串只能以一个数字开头。 在 Java中我们可以通过 myConst关键字来指定数组的长度。下面就看一下…

直线飙升到10万+star的AutoGpt,有多强?帮我写了个网页!

先来感受一下10万的star,到底有多强! 从4月2日开始,直线飙升到10万star Auto-GPT是一个实验性的开源应用程序,展示了GPT-4语言模型的功能。这个程序由GPT-4驱动,将LLM“思想”链接在一起,以自主实现您设定的…

CTO解读:从“RSAC 2023”到“韧性数据安全”—Stronger Together

一年一度RSA Conference已落下帷幕。作为全球最具规模的安全大会,每年一届的RSAC都是安全行业的风向标。 2023年RSAC的主题是:Stronger Together,一起更强大。安全产品往往是场景化的,单点产品解决不同的问题,有机的整…

QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样

QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样 [1] QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样一、本自制虚拟键盘特点二、windows打开系统自带软键盘三、让键盘界面保持在最上方、不改变底层界面焦点四、长按按键重复输入键盘内容五、模拟键盘点击事件完成虚拟键盘…

虹科方案|使用 HK-TRUENAS支持媒体和娱乐工作流程-2

一、支持 M&E 工作流程的HK-TRUENAS 屡获殊荣的 TrueNAS 存储解决方案支持单独的工作空间来存放可在现场或制作室访问的媒体资产。 TrueNAS 提供企业功能,支持多个物理和虚拟应用程序,并具有同步块和文件存储访问。 这些功能允许备份和重新利用视频、…

路由递归配置

路由递归原理 路由必须有直连的下一跳才能够指导转发,但是路由生成时下一跳可能不是直连的,因此需要计算出一个直连的下一跳和对应的出接口,这个过程就叫做路由递归 。 路由递归也被称为路由 迭代。 实验配置 路由器R1配置 interface GigabitEthernet0/0/0ip address 192.…

《编程思维与实践》1049.GPS数据处理

《编程思维与实践》1049.GPS数据处理 题目 思路 注记: UTC为世界标准时间(0时区),东区加,西区减. 分两步实现: 1.判断是否为有效的语句: 有效需要满足三个条件: ①语句含$GPRMC,可以通过strstr搜索来判断; ②状态已定位,可以用sscanf来读取判断; ③异或结果与校验值相同,校验值…

【Vue学习笔记6】好用的 Vueuse 工具包

1. 安装Vueuse VueUse 的官方(https://vueuse.org/)的介绍说这是一个 Composition API 的工具集合,适用于 Vue 2.x 或者 Vue 3.x,用起来和 React Hooks 还挺像的。 VueUse 插件的安装 npm install vueuse/core2. 实现全屏功能 …

【三十天精通Vue 3】第二十七天 Vue 3的实战案例-接口进度条

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、安装进度条插件1.1 安装NProgress插件1.2 在Vue3中引入NProgress插件二、在路由中使用进度条2.1 在全局路由中使用进度…

ubuntu20.04安装搜狗输入法

搜狗输入法下载网址: https://shurufa.sogou.com/linux 选择x86_64版本 打开 系统设置——区域和语言——管理已安装的语言——在“语言”tab下——点击“添加或删除语言” 弹出“已安装语言”窗口,勾选中文(简体),点…