你不知道的JavaScript——类型
一、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;//
无独有偶,数组也是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; //undefined 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浏览器不会!
最新文章
- java selenium (五) 元素定位大全
- Vault 不同版本的API的异同
- UFT\QTP 12 新特性
- Jquery添加移除样式
- python 安装mysql 客户端遇到的问题
- Vue模板逻辑
- 简易商品信息管理系统——首个Web项目
- tomcat6 高并发配置 与优化
- Python函数的装饰器修复技术(@wraps)
- 【dbdiff】数据库比对工具安装
- 关于Linux防火墙'iptables'的面试问答
- Linux内核配置
- windows 设置CapsLock键开启大写后使用shift键取消大写
- jquery添加用户 事例
- vim删除某一列
- windows10 查看进程端口的情况
- 利用localStorage事件来跨标签页共享sessionStorage
- Java实现目的选层电梯的调度
- Underscore.js-精巧而强大实用功能库
- web.xml 中以编码方式添加filter并设置初始化参数AbstractAnnotationConfigDispatchServletInitializer
热门文章
- Json应用案例之FastJson
- Ubuntu 如何安装Google Chrome浏览器
- HTML5 web存储
- Hive调优实践
- 基于FPGA的均值滤波算法实现
- VS2015 'utf-8' codec can't decode byte
- Docker+Gogs搭建个人Git服务
- 挖个坑,写一个Spring+SpringMVC+Mybatis的项目
- JAVA_多线程_单例模式
- Java架构师系统培训高并发分布式电商实战activemq,netty,nginx,redis dubbo shiro jvm虚拟机视频教程下载