Standing on Shoulders of Giants;

说到JavaScript里的类型很容易就让人想起 42和"42",分别是string型和number型,但是他们可以直接进行运算。这就是Js里面有趣又让人头疼的问题了。JavaScript会进行强制类型转换

下面我们就正式来认识一下JS中的类型吧:

1、内置类型

JavaScript有七种内置类型:

2、类型检测 typeof

1 typeof undefined === 'undefined';//true
2 typeof 'abc' === 'string';//true
3 typeof 123 === 'number';//true
4 typeof true === 'boolean';//true
5 typeof {a:'test'} === 'object';//true
6 typeof Symbol() === 'symbol';//true

一共七种类型,六种都在上面了,还有谁呢?对,还有null。

null 比较特殊,用typeof 判断会出问题

    typeof null === 'object';//true

照理说应该是typeof null 的返回值应该是'null',但是这个bug确实在js语言中客观存在。

如果要判断一个值是否是null,可以用下面的这种方式来检测:

 var a = null;
if(!a&&typeof a === 'object'){
//此刻说明a的值是null }

null是“假值”,也是唯一一个用typeof检测会返回‘object’的基本类型值。

另两种种特殊情况是function和array

typeof function a(){} === 'function';//true
typeof [1,2,3] === 'object';//object

函数和数组都是对象的内置类型,算是object的‘子类型’。

函数可以拥有属性,例如a.length;//0;

2、值和类型

JavaScritp中的变量是没有类型的,只有值才有。变量可以随时持有任何类型的值

语言引擎不要求变量总是持有与其初始值同类型的值。一个变量可以先被赋值为字符串后重新赋值为数字,不会报错。

3、undefined和undeclared

变量在未持有值的时候为undefined,此时typeof 返回 ' undefined ';

已在作用域中声明但没有赋值的变量返回值是undefined,在作用域中没声明过的变量返回值是:ReferenceError: 变量名 is not defined

 var a ;
a;//undefined
b;//ReferenceError : b is not defined

这里有一个要注意的点:typeof 对于未声明过和声明过未赋值的变量返回结果都是‘undefined’

4、如何在程序中检查变量是否已存在

if(typeof myTest !== 'undefined'){
console.log('myTest已经存在')
}
if(typeof atob === 'undefined'){
atob = function(){}
}

还可以用‘依赖注入’设计模式,就是将依赖通过参数显示地传递到函数中:

function doSomethingCool(FeatureXyz){
var helper = FeatureXyz || function(){}
var val = helper();
}

5、总结:

1、JavaScript中其中内置类型:null、undefined、string、number、boolean、object、symbol

2、变量没有类型,但它们持有的值有类型,类型定义了值的行为特征

3、undefined:声明过未赋值变量;undeclared:没声明过

JavaScript中七种数据类型·中·一的更多相关文章

  1. JavaScript的七种数据类型

    我知道这个话题网上说法非常多,甚至还有分出什么"Array,Function"之类的阿猫阿狗的类型.今天来整理这个话题的时候,先贴一张MDN官方的说法: 这个分法是对的,也是目前来 ...

  2. 细说 JavaScript 七种数据类型

    在 JavaScript 规范中,共定义了七种数据类型,分为 “基本类型” 和 “引用类型” 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined ...

  3. Symbol -- JavaScript 语言的第七种数据类型

    ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种机制,保证 ...

  4. JavaScript 七种数据类型

    在 JavaScript 规范中,共定义了七种数据类型,分为 “基本类型” 和 “引用类型” 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined ...

  5. java中8种数据类型和默认值所占字节数

    java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...

  6. 只显示前几条数据的sql语句写法 七种数据库中Select Top的使用方法

    七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT ...

  7. 七种数据库中Select Top的使用方法 (只显示数据库的几条记录)

    七种数据库中Select Top的使用方法 1. Oracle数据库  SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库  SELE ...

  8. 【面试题】JS第七种数据类型Symbol详解

    JS第七种数据类型Symbol详解 点击打开视频讲解更加详细 一.什么是Symbol? Symbol是ES6中引入的一种新的基本数据类型,用于表示一个独一无二的值.它是JavaScript中的第 七种 ...

  9. ES6 之 第七种数据类型Symbol

    概述 为了减少对象的属性名冲突,ES6引入新的原始数据类型Symbol,JS的第七种数据类型. Symbol 能够保证每个属性的名字都是独一无二,这样就能从根本上防止属性名冲突. Symbol 值能够 ...

随机推荐

  1. js获取n分钟(或n小时或n个月)后(或前)的时间(日期)

    标题有点绕,其实意思就是根据系统当前时间,获取n分钟或n小时或n个月后的时间. 例如:当前时间下,获取10分钟后的时间. var date=new Date(); //1. js获取当前时间 var ...

  2. 基础I/O接口与操作

    C语言中的文件接口 1 打开文件 FILE * fopen(const char * path,const char * mode) 参数:path:文件路径 mode:打开文件的方式 返回值:成功返 ...

  3. macbook 安装oracle RAC

    http://blog.itpub.net/29047826/viewspace-1268923/ http://blog.itpub.net/24930246/viewspace-1426856/

  4. Python 模块 和 包

    模块 os模块 路径拼接 os.path.join

  5. 整理学习ASP.NET MVC的资源

    网站 http://www.asp.net/mvc http://stackoverflow.com/questions/tagged/asp.net-mvc+asp.net-mvc-4?sort=n ...

  6. Spring Boot打包war jar 部署tomcat

    概述 1.Spring Boot聚合工程打包war部署Tomcat 2.Spring Boot打包Jar,通过Java -jar直接运行. 3.提供完整pom.xml测试项目 至github 4.项目 ...

  7. Java 死锁优化

    死锁示例1 public class SyncThread implements Runnable{ private Object obj1; private Object obj2; public ...

  8. 解析BroadcastReceiver之你需要了解的一些东东

    前些天把四大组件之一的Service扯了一遍,今天就要开始谈谈它的弟兄BroadcastReceiver了.写到这里我挺纠结的,因为广播接收者确实比较简单,但是各位就不要以为简单的就不内涵,也许我们慢 ...

  9. php数组方法

    查找.筛选与搜索数组元素是数组操作的一些常见功能.下面来介绍一下几个相关的函数. in_array()函数 in_array()函数在一个数组汇总搜索一个特定值,如果找到这个值返回true,否则返回f ...

  10. Linux-(watch,at,crontab)

    watch命令 1.命令格式: watch  [参数]  [命令] 2.命令功能: 可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令. watch可以帮你监测一个命令的运行结 ...