javascript变量类型

前面说过JavaScript没有C的int、float等关键字,那么,JavaScript变量有没有类型呢?

前面说了,若变量为字符串,则初始化为空字符串等等,那就肯定有类型了。JavaScript共有6种基本变量

  • 未定义  undefined
  • 字符串   string
  • 数值  number
  • 布尔值  boolean
  • 函数  function
  • 对象  object
其中,前四种是值类型,后两种是引用类型,引用类型可以参照C里面的指针(但实际上JavaScript是没有指针的)
判断变量是什么类型,我们可以用typeof操作符来判断
[javascript]  view plain  copy
  1. typeof(1234); // number  


undefined类型

主要在以下情况出现

  • 显式声明了但未初始化的变量
  • 未声明直接引用的变量
  • 直接初始化为undefined的变量
  • 函数声明提升
后面的函数声明提升涉及JavaScript的解析原理,这里先不讲,以后有机会再讲


string类型

这个比较好理解,就是字符串,如果学过C++的话就相当于String。不同的是,JavaScript是不区分单字符跟字符串的,也就是说,一个字符就是长度为1的字符串。在JavaScript中,单双引号功能一样,可以嵌套,一般用于字符串中有字符串的情况(在C++中遇到这种情况一般需要转义双引号)
字符串类型变量的声明,可以用字面量,也可以用String的构造函数来构造
[javascript]  view plain  copy
  1. var str = "1234";               // str = "1234"  
  2. var str = new String();         // str = ""  
  3. var str = new String("1234");   // str = "1234"  
如果String构造函数不传参数,则默认为空字符串。
string类型变量可以使用各种字符串操作函数,例如最常用的
[javascript]  view plain  copy
  1. var str = new String("1234");  
  2. console.log(str.length); // 4  
  3. "1234".length; // 4  
所有对象(除undefined和null外)都有toString方法,传入String构造函数的任意类型数据都会被转换为字符串,包括undefined和null
[javascript]  view plain  copy
  1. var str = new String(1234);         // str = "1234"  
  2. var str = new String(undefined);    // str = "undefined"  
  3. var str = new String(null);         // str = "null"  


number类型

这个类型,相当于C里的int,long int,long long int,short,float,double等等的集合体,用一句话说就是只要是数,不管是小数整数,不管是正数负数,都属于number类型。
当然,number也有上界跟下界,不过很大,在实际情况中基本不会触及这个边界,所以在这里就不提及了。
number类型也是有区分整型跟浮点型的,但没有相应的关键字。
和string类似,声明一个number类型的变量,可以用字面量,也可以用Number构造函数
[javascript]  view plain  copy
  1. var num = 1234;                     // num = 1234  
  2. var num = new Number(1234);    // num = 1234  
和字符串类似,如果我们传入构造函数的是其他类型的呢?
从其他类型转换为number类型,可以使用parseInt和parseFloat方法,前者转换为整型,后者转换为浮点型,例如
[javascript]  view plain  copy
  1. var num = parseInt("1234");     // num = 1234  
如果被转化的对象里含有非数字字符,那么就会返回NaN(not a number),NaN表示应该返回number类型结果却没有
[javascript]  view plain  copy
  1. var num = parseInt("ab1234");     // num = NaN  


boolean 类型

C中没有bool类型,但C++中是有bool类型的,可以参照下。
boolean类型只有两个值,true和false
其他类型和boolean的转换规则如下:
  • number转Boolean:0为false,其他为true
  • string转Boolean:空串为false,其他为true
  • undefined转Boolean:永远为false
  • object转Boolean:空对象为false,其他为true
  • function转Boolean:永远为true


function类型

function和之前三种类型有所不同,function本身是一个在用的关键字。前面说过,JavaScript的声明的关键字有两个,一个是var,一个就是function
若用function关键字来声明,声明的变量名即为指向该函数的”指针“(注意,不是真的指针),且效果实际上可以用var声明来代替
[javascript]  view plain  copy
  1. function func(param1, param2) {  
  2.     return param1 + param2;  
  3. }  
  4. var func = function(param1, param2) {  
  5.     return param1 + param2;  
  6. }  
  7. var func = new Function("param1""param2""return param1 + param2");  
这三者在绝大多数情况下是等价的。之所以说绝大部分,是因为在函数声明提升中会有所不同,这里也不涉及。
其他类型是无法转换为引用类型的,所以string类型等等是无法转换为function类型的


object类型

这里的object是狭义的。广义上说,JS中一切皆对象,JavaScript的所有变量类型,都是从object引申出去的。我们先不讨论这么高深的问题,先讨论狭义上的object。
object类型的声明同样分为字面量和构造函数实例化
[javascript]  view plain  copy
  1. var obj = new Object();  
  2. var obj = {};  
object类型变量可以使用object方法,object类型有prototype属性(JavaScript继承的基础)
同样的,其他类型无法转换为object类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值