关键词:
一、ECMAScript语言中所有的值均有一个对应的语言类型。ECMAScript语言类型包括Undefined、Null、Boolean、String、Number和Object。
我们这样来定义类型:对于语言引擎和开发人员来说,类型是值的内部特征,它定义了值的行为,以使其区别于其它值。
JS有七种内置类型:
- 空值(null)
- 未定义(undefined)
- 布尔值(boolean)
- 数字(number)
- 字符串(string)
- 对象(object)
- 符号(symbol,ES6中新增)
注意:除了对象外,其他统称为“基本类型”。
我们可以用typeof运算符来查看值的类型,它返回的是类型的字符串值。例如:
- typeof undefined === "undefined";
- typeof true === "boolean";
- typeof 42 === "number";
- typeof "42" === "string";
- typeof { life:42 } === "object";
- typeof Symbol === "symbol"; //ES6中新加入的类型
但是 typeof null === "object"; 这个是js的一个bug,由来已久(20多年了)。
那么我们需要符合条件来检测null值的类型
var a=null; (!a&&typeof a==="object"); //true
函数是“可调用对象”,实际上function(函数)是object的一个“子类型”,它有一个内部属性[[Call]],该属性使其可以被调用。
typeof function a(){ /**/ } ==="function"; //true
函数不仅是对象,还可以拥有属性。例如:
function a(b,c){ /*...*/ } //函数对象的length属性是其声明的参数的个数,那么: a.length;//2
无独有偶,数组也是object的一个“子类型”,数组的元素按数字来进行索引(而非普通像对象那样通过字符串键值对),其length属性是元素的个数。
typeof [1,2,3] ==="object"; //true
二、值和类型
JavaScript中的变量是没有类型的,只有值才有。变量可以随时持有任何类型的值。也就是说语言引擎不要求变量总是持有与其初始值同类型的值。
var a=42; typeof a; //"number" a=true; typeof a; //"boolean" typeof typeof 42 //"string" //typeof 42 首先返回字符串“number”,然后typeof “number” 返回 “string”
undefined和undeclared完全是两回事。
变量在未持有值的时候为undefined。此时typeof 返回“undefined”:
首先看下undefined
var a; typeof a; //"undefined" var b=42; var c; //later b=c; typeof b; //"undefined" typeof c; //"undefined"
undefined和undeclared的区别:
var a; a; //fundefined b; //ReferenceError: b is not defined 其实这里的意思是:b is not declared 可是sb浏览器不会说那么清楚,我们需要原谅它。 //然而更让人抓狂的是 typeof 处理undeclared变量的方式。例如: var a; typeof a; //"undefined" typeof b; //"undefined" 而且这里没有报错,是因为typeof 有一个特殊的安全防范机制,这里typeof如果能返回undeclared而非undefined的话,多好啊,可惜sb浏览器不会!
《你不知道的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(上卷)读书笔记之二----词法作用域
...要的工作类型,一种是词法作用域,一种是动态作用域,Javascript采用的是词法作用域,关于动态作用域的有兴趣的可以自行Google。1.词法阶段 首 查看详情
《你不知道的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> 查看详情
《你不知道的javascript》原型
1[[Prototype]][[Prototype]]是对其他对象的引用,几乎所有对象在创建时[[Prototype]]属性会被赋予非空值。varmyObject={a:2}myObject.a;//2 引用对象属性时会触发[[Get]]操作,它会检查对象本身是否有这个属性,如果有就使用它,但a不在myObj... 查看详情