你不知道的javascript之类型

xzhx xzhx     2022-10-21     437

关键词:

JavaScript是一门简单易用的语言,应用广泛,同时它的语言机制又十分复杂和微妙,即使经验丰富的开发人员也需要用心学习才能真正掌握。

《你不知道的JavaScript》中是这样定义类型的:

类型是值的内部特征,它定义了值的行为,以使其区别于其他值。

这样的定义可能略简单了一些,不够已经足够让我们去理解类型的含义。

不得不提的强制类型转换

在JavaScript中,强制类型转换无处不在,在我们的程序中,有意无意地,都经常地利用到强制类型转换。它给我们带来了许多便利,同时也容易造成某一些坑。当然了,之所以造成坑,也主要就是因为对类型的了解不够。所以,我们十分有必要学习一些关于类型的细节。

内置类型

JavaScript有7种内置类型,分别是:

  1. 空值,null
  2. 未定义,undefined
  3. 布尔值,boolean
  4. 数字,number
  5. 字符串,string
  6. 对象,object
  7. 符号,symbol(ES6中新增的)

这其中,除了对象以外的统称为基本类型。

typeof null === "object"

出乎意料的,这条语句是true,即用typeof去判断null的类型,得到的是object,这是一个由来已久的bug。修复它可能会导致许多现存系统的崩溃,所以这个bug也许会一直存在。

值和类型

首先JavaScript不同于C++等的编程语言,JavaScript中的变量是无类型的,一个变量可以持有任何类型的值。对一个变量使用typeof操作,返回的也是变量持有的值的类型。

undefined

关于undefined,是挺纠结的...
考虑以下三种情况:

  1. 声明一个变量却不赋值的话,typeof操作返回的值是undefined。
  2. 如果去typeof一个未声明的变量,不会报错,返回的同样是undefined。
  3. 使用一个未声明的变量a,会报错a is not defined.

值得注意的是,undefined和not defined看上去很相似,其实是不同的,其实not defined用undeclared来表示会减少许多误解。

不过,上述情况中的第二条的原理,也被称作typeof的安全防范机制,有时候也被用来检查未声明的变量。因为这样不会报错,某些情况下很有用。

你不知道的javascript之indexof()

vara="HelloWorld";if(a.indexOf("lo")>=0){ //true  //找到匹配} if(a.indexOf("xo")==-1){ //true  //没有找到匹配} >=0和==-1这样的写法不是很好,称为“”抽象渗漏“,意思是在代码中暴露了底层的实现细节,这里是指用-1作... 查看详情

你不知道的javascript——类型

一、ECMAScript语言中所有的值均有一个对应的语言类型。ECMAScript语言类型包括Undefined、Null、Boolean、String、Number和Object。  我们这样来定义类型:对于语言引擎和开发人员来说,类型是值的内部特征,它定义了值的行为,以使... 查看详情

《你不知道的javascript》整理——强制类型转换

JavaScript中通常分为两种类型转换,“隐式强制类型转换”(implicitcoercion)和“显式强制类型转换”(explicitcoercion)。下面所有代码的源码可以在此处查看。一、强制转换为字符串(ToString)1)ToString基本类型值的字符串化规则... 查看详情

你不知道的javascript笔记

类型:JavaScript有7种内置类型空值(null)未定义(undefined)布尔值(boolean)数字(number)字符串(string)对象(object)符号(symbol)   除对象以外,其他统称为“基本类型” 用typeof运算符来查看值的类型typeofundefined ==="undefi... 查看详情

《你不知道的javascript》整理——对象

...造形式varmyObj=newObject();myObj.key=value; 二、类型对象是JavaScript的基础。1)基本类型在JavaScript中一共有六种主要类型(术语是“语言类型”):string、number、boolean、null、unde 查看详情

你不知道的javascript--数据类型(代码片段)

1.数据类型在js中有7中数据类型其中6种是基本类型包括null,undefined,boolean,number,string和symbol,还有一种是引用类型object但是判断数据类型的时候除了null以外都可以用typeof1.nullnull应该如何判断呢,应该是这样的typeofa===‘object‘&&... 查看详情

你不知道的javascript

一、对象JavaScript简单类型有数字、字符串、布尔值、null、undefined,其他所有的值都是对象(数组、函数、正则表达式都是对象)。数字、字符串、布尔值虽然拥有方法(包装对象),但并不是对象。包装对象:每当读取一个基... 查看详情

《你不知道的javascript[中卷]》——类型&值

                  类型定义了值的行为特征             &nb 查看详情

你不知道的javascript基础细节

语法部分type属性:默认的type就是javascript,所以不必显式指定type为javascriptjavascript不强制在每个语句结尾加“;”,javascript会自动加分号,但是在某些情况下会改变程序的语义,所以最好主动加“;”两个相等运算符比较‘==’... 查看详情

你不知道的javascript中,读书笔记

七种内置类型null,undefined,boolean,number,string,object,symboltypeofnull===‘object‘//truenull是typeof是object的唯一的假值typeoffunction会返回‘function‘使用typeofx!==‘undefined‘比直接判断x更加安全,因为不会引发referenceerror 查看详情

《你不知道的javascript》整理——值与原生函数

一、值1)数字JavaScript只有一种数值类型:number(数字),包括“整数”和带小数的十进制数。//数字的语法vara=5E10;//50000000000a.toExponential();//"5e+10"varb=a*a;//2.5e+21varc=1/a;//2e-11vard=0.42;vare=.42;//数字前面的0可以省略varf=42.;//小数点后... 查看详情

《你不知道的javascript》系列分享专栏

《你不知道的JavaScript》系列分享专栏你不知道的JavaScript”系列就是要让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript每一个零部件的用途《你不知道的JavaScript》已整理成PDF文档,点击可直接下载至本地查... 查看详情

四两拨千斤——你不知道的vscode编码typescript的技巧

...的便利,包括其丰富的类型变量、抽象与接口,转而使用JavaScript时,一定会觉得不够满意。尤其是JavaScript声明的变量Number可以轻而易举的分配给String,IDE如何执行任何类型的IntelliSense都让人十分困扰。面对这个技术障碍,我们... 查看详情

函数作用域和块级作用域--你不知道的javascript

...能访问的值,但是const声明的是常量,也不能修改函数是JavaScript中最常见的作用域单元。本质上,声明在一个函数内部的变量或函数会在所处的作用域中“隐藏”起来,这是有意为之的良好软件的设计原则。但函数不是唯一的作... 查看详情

《你不知道的javascript[中卷]》14——asynquence附录

 《你不知道的JavaScript[中卷]》【14】——asynquence附录 查看详情

你不知道的javascript(中卷)笔记

<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>你不知道的javascript(中卷)</title></head><body><scripttype="text/javascript">/*//封装对象包装vara=newBool 查看详情

javascript你不知道的事儿

if(in)语句letnames=['Lily','Barry','Dendi','Boogie','Lily'];letnameNum=names.reduce((pre,cur)=>{if(curinpre){//pre中是否有cur属性pre[cur]++;}else{pre[cur]=1;//为pre这个对象添加cur属性,并且赋值为1}returnpre;},{ 查看详情

你不知道的javascript(上卷卷)笔记

<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>你不知道的javascript(上卷)</title></head><body></body></html>   查看详情