javascript拾零(1):typeof

javascript数据和变量是javascript所有知识和技术的基础之基础,非常重要,那么typof作为专门用来判断变量和数据的类型的指令,就一样很重要了。本篇来“细抠”一下typeof,关于变量和数据可参考《javascript入门(1):变量和数据》

typeof的两种用法

typeof(10086)和typeof 10086是等价的。下文主要采用后一种写法。

typeof作用于谁?

既可以作用于数据,也可以作用于变量。

但严格地讲,如果你能理解var i = 10086当中,10086其实并不是数据,而只是一个“匿名变量”(i有名字,叫做i,直观地看不到它的值,必须打印i才能知道它的值;而10086有值,就是10086,但它没有名字),那么你其实就可以说,typeof只用于变量。更进一步地,程序员其实从来也没有真的“碰”过数据。

如此一来,如下代码:

var i = 10086;
console.log(typeof 10086); // number
console.log(typeof i); // number

就应该这样解读:

typeof i是指:i所指代的数据的类型是number;

typeof 10086是指:10086这个匿名变量(初级程序员更愿意认为这就是数据本身)所指代的数据的类型是number

typeof的结果是什么(返回了什么)?

typeof的结果,是变量(所指代的数据)的类型。诸如number,boolean,string,object等。

但是,typeof结果的类型又是什么?typeof (typeof 10086)的结果是什么?

console.log(typeof (typeof 10086)); // string

是的,typeof的结果,表达了数据的类型,但typeof结果本身的类型其实是一个字符串

当typeof遇到特殊变量(1)

变量如果只声明但还没有显式赋值的情况下,变量本身所指代的数据,是undefined这个全局特殊值。

var i;
console.log(i); // undefined

那么话题可以转为“undefined和typeof能擦出什么火花?”

typeof遇到undefined

console.log(typeof undefined); // undefined。这个打印结果,并不是undefined本身,而只是一个字符串'undefined'
console.log(typeof (typeof undefined)); // string

全局特殊值undefined的类型,打印出来是undefined,然而这个打印结果并不是undefined本身,其实是个字符串。也就是说:

1、undefined的类型是string,undefined并不是你可能以为的一个什么很奇怪的东西,虽然它特殊,但是它很合群,它是个特殊的字符串

2、但undefined并不是'undefined'这个字符串,虽然它被打印时确实会显示undefined字样,这和打印'undefined'字符串的结果是完全一样的,这只是打印程序对undefined的一个特殊处理,具体undefined到底是个什么样子的字符串,它什么样子都不是!

console.log(undefined == 'undefined'); // false
console.log(undefined === 'undefined'); // false

注:关于==和===的区别,此处不展开,不了解的读者自行搜阅文献。

当typeof遇到特殊变量(2)

如果一个变量根本没有声明呢?

console.log(typeof x); // undefined

这是typeof表现得非常不合理的一点。没有声明的变量,绝大多数其他操作都会给出一个错误,但typeof会对未声明的变量给出undefined

也就是说,无论变量声明了但还没有显式赋值,抑或根本没声明,对其执行typeof操作都得到字符串‘undefined’。因此,不要用typof来区分一个变量到底是“未声明”还是“声明了但未赋值”。正确区分的办法是:

var i;
console.log(i == undefined); // i未赋值
console.log((typeof j) == 'undefined'); // j未声明

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值