学习JS的心路历程-类型
前言
之前学JS时候都是靠着谷狗一路跌跌撞撞的学过来,从来没有去翻过MDN的文件,导致留了许多技术债给自己。
最近有幸遇到一位前辈并开始从头学JS,前辈表示学程序不看文件是想作死自己?于是我的第一份功课就是读完MDN的JS入门文件,在这过程中我也笔记了一些我认为蛮重要的地方,希望藉由这三十天的过程中能加深自己印象并分享给各位。
如果文章中有任何的错误或引用没有附上出处也欢迎各位指教。
数据类型
JavaScript中,总共有七种类型:
String
Number
Boolean
Null
Undefined
Symbol(于ECMAScript 6新定义)
Object
其中又可以分成以下两大类别:
原始类型(Primitive type)
物件类型
除了Object其余都是原始类型
原始类型(Primitive type)
JS中最基本的单位,是一个值,因为不是物件所以没有任何属性。
不可变异(immutable)
所有基本类型都是不可改变的,在这里要注意的是别把变数和类型搞混了。
我们可以赋予变数一个新的值,不论是字串或是数字类型,但是却无法更改现有值。
物件类型
JS中除了原始类型以外的一切都是物件
物件这个类型代表了一种复合值(computed value),可以对他设定一些特性(properties),它们每一个都持有了可以是任何类型的值。
这样说听请来有点令人不知所措,来看个例子吧:
var obj ={
a:'hola',
b:42,
c:true
}
obj.a;// 'hola'
obj.b;//42
obj.c;//true
辨别类型:
用typeof可以判断上述中除了null的值
var myStr = 'hello world';
typeof myStr;//“string”
typeof 'hello world';//“string”
var myNum = 42;
typeof myNum;//“number”
typeof 42;//“number”
var myBol = true;
typeof myBol;//“boolean”
typeof true;//“boolean”
var myUndefined;
typeof myUndefined;//“undefined”
typeof undefined;//“undefined”
typeof null;//“object”
var myObj = {
a:'hola',
}
typeof myObj;//“object”
使用typeof(null)===“object”是早期JS设计时候的Bug。
JS会让这bug存在这么久(大概快二十年)原因在于很多网站仰赖这个bug如果修正可能会产生更多的bug。
参考:
MDN Primitive
JavaScript的数据类型与数据结构
你所不知道的JS导读、类型与文法
学习JS的心路历程-类型的更多相关文章
- 学习JS的心路历程-函式(一)
前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...
- 学习JS的心路历程-参数的传递(下)
今天我们要来探讨JS到底是透过何种参数传递方式呢? 废话不多说,上示例!! 我们先声明原始型别和物件型别来看看两者是否会有不一样的差异: var myStr = 'Hola': var myObj = ...
- 学习JS的心路历程-参数传递方式(上)
很多人认为JS的传递方式是值是Call by value, 物件及数组是Call by Reference.甚至还有人宣称其实JS是Call by sharing,那到底是哪一个呢? 这两天我们一一来 ...
- 学习JS的心路历程-范围Scope和提升(Hoisting)
在上一篇提到了JS有三种声明变量的方式,分别是var.const及let,var和const let最大区别就是范围(scope)的限制.所以在这一篇我们会详谈何谓范围链及他们的复写优先级. 范围Sc ...
- 学习JS的心路历程-声明
变量 在程序中将一个值指定(assign)给一个符号式的容器(symbolic container),叫做一个变量(variable). 声明在JS中目前提供了三种声明方式: var 声明一个变量,可 ...
- 学JS的心路历程-物件与原型(三)
昨天有说明到函式与建构式的原型,及指定建构式函式原型为另一个建构式函式,但其实这会造成复写constructor的问题. 复写constructor的问题(vmwork) 我们昨天有提到「建构式函式可 ...
- 学JS的心路历程 -物件与原型(二)
昨天有提到说Object.setPrototypeOf可以指定一个物件为另一个物件的原型,但有想过到底这个原型,也就是[[Prototype]]最终会到何处吗? 答案是Object.prototype ...
- 学JS的心路历程 -函式(三)this
this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...
- .net工程师学习vue的心路历程(一)
实习一年后,想做一个属于自己的博客网站,准备用core api去搭建服务端接口,前端准备采用vue这样的一个框架.本身时一个服务端程序员,所以来学习记录一些vue的知识点,有什么不足的希望大家指正,谢 ...
随机推荐
- 微信小程序--swiper组件
<view class='swiper-container'> <swiper indicator-dots="true" autoplay=" ver ...
- 安装python的jupyter notebook工具
jupyter notebook是一个通过网页运行python的工具 支持分段的python运行,并能直观的查看结果 支持多python环境运行,需要加装(conda) 安装步骤 1.安装python ...
- 调试kettle插件
http://wiki.pentaho.com/display/EAI/How+to+debug+a+Kettle+4+plugin
- swt text 回车 defaultSelected
今天试了一下SWT控件 TEXT 中的回车事件,使用 defaultSelected 进行处理,结果怎么也不能触发事件. 经过仔细排查,发现是TEXT选中了 wrap 的原因,毕竟如果是多行的话,肯定 ...
- Eureka 客户端启动报错误 Cannot determine embedded database driver class for database type NONE
用这种数据库配置就是死活连不上数据库 提示:Cannot determine embedded database driver class for database type NONE 解决方式: 启 ...
- 好久没玩docker了,温下手
好久没玩docker了,温下手 安装 Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: yum i ...
- 销售人员的分析,也可以用类似RFM的思路吗?
本文转自知乎 作者:接地气的陈老师 ————————————————————————————————————————————————————— 有同学问:“销售人员的分析,也可以用类似RFM的思路吗, ...
- 《算法》第六章部分程序 part 6
▶ 书中第六章部分程序,包括在加上自己补充的代码,包括二分图最大匹配(最小顶点覆盖)的交替路径算法和 HopcroftKarp 算法 ● 二分图最大匹配(最小顶点覆盖)的交替路径算法 package ...
- Maven项目jar包的依懒范围
- 37. sqlplus工具连接服务端或其他电脑的oracle方式
1. 方式1:IP:监听端口/实例ID,例如:192.168.0.1:1521/orcl 2.方式2:IP:监听端口/服务名,例如:192.168.0.1:1521/ORCL.168.0.1 查看服务 ...