学习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的知识点,有什么不足的希望大家指正,谢 ...
随机推荐
- Service 和 IntentService的区别;
Srevice不是在子线程,在Srevice中做耗时操作一样ANR,然后我们就会用到IntentService,IntentSrevice不但擅长做耗时操作,还有一个特点,用完即走: 在Srevice ...
- nvm+nodejs+npm
安装nvm 1.下载nvm包,地址:https://github.com/coreybutler/nvm-windows/releases选择nvm-setup.zip下载, 解压,双击安装即可 2. ...
- linux问题集
Too many authentication failures for root (code 2) 原因:服务器可能由于装了一下安全软件导致有时用ssh远程工具登陆不了,提示太多认证失败for ro ...
- [Android]Android布局优化之<include />
转载请标明:转载于http://www.cnblogs.com/Liuyt-61/p/6602891.html -------------------------------------------- ...
- tkinter面板切换
- IntelliJ IDEA 编译代码报错 找不到符号 符号: 找不到符号包 包
在使用IDEA的时候,经常出现过找不到包或者找不到符号的情况,可以尝试以下几种方式来解决 1.如果项目使用的是Maven可以使用Maven-Reimport 2.还可以 Invalidate and ...
- load_basemap
map = new Map("map", { //basemap: "satellite", //center: [-85.743, 38.256], //zo ...
- kettle实现简单的增量同步
下载 pdi-ce-7.0.0.0-25.zip 解压 安装jdk 1.7以上的版本 配置环境变量 下载并将mysql-connector-java-5.1.39.jar 拷贝到 \data-inte ...
- sparksql进阶
scala> val df=spark.read.json("/tmp/pdf1json")df: org.apache.spark.sql.DataFrame = [age ...
- Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean)
eclipse在使用maven的tomcat控件编译java程序时,报错 Failed to execute goal org.apache.maven.plugins:maven-clean-plu ...