javascript跟很多语言相比,它有一个很突出的特点,它是一门弱类型语言。对于变量的声明,它不需要像C,或者java语言那样,要给定类型声明。比如我们定义一个整型变量a,在绝多数的语言都是这样声明的:int a,而在javascript 只需要使用关键字,var 或者let 声明即可:var a,let a。今天,我们来探讨一下Javascript的数据类型。
1.类型检测
在Javascript中可以使用typeof 和 instanceof 来检测数据是那种类型。
typeof
var test = 1;
console.log(typeof test);
//输出:number
instanceof
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
function Hd(){
console.log('hello');
}
var obj = new Hd();
console.log(obj instanceof Hd);
console.log(obj instanceof Object);
//输出:true true
2. 值类型和引用类型的区别
在javascript数据可分为值类型和引用类型,值类型变量直接保存的是具体的数值,而变量类型保存的数据的地址,这里的地址类似C语言中的指针,我们用下面的例子来看看他们之间的区别。
var num1 = 1;
var num2 = num1;
num2 = 2;
var obj1 = {
name:'hello'
}
var obj2 = obj1;
obj2.name = 'js';
console.log(num1,num2);
console.log(obj1,obj2);
输出:1 2;{name:'js'} {name:'js'}
string(值类型)
string 类型在JavaScript是使用较为广泛的数据类型。
string 类型的声明
字面量声明:
var str = 'hello js';
对象声明:
var str = new String('hello js');
转义字符
符号 | 含义 |
---|---|
\t | 制表符 |
\n | 换行 |
\ \ | 斜杆符号 |
’ | 单引号 |
" | 双引号 |
模板字面量
使用模板字面量的好处是可以引入变量和表达式,同时字面量可以保存换行等原有的格式。
var str = "world";
var str1 = `hello ${str}
hello js
`
输出:hello world
hello js
类型转换
将字符串转化为数组
var str = 'hellojs';
console.log(str.split(''));
输出: ['h', 'e', 'l', 'l', 'o', 'j', 's']
Boolean(值类型)
boolean类型的声明
对象声明:
var bool = new Boolean(true);
字面量声明:
var bool = true;
隐式转换(重要)
数据类型 | true | false |
---|---|---|
String | 非空字符串 | 空字符串 |
Number | 非0的数值 | 0、NaN |
Array | 数组不参与比较时 | 参与比较的空数组 |
Numer(值类型)
对象声明
var num = new Number(1);
字面量声明:
var num = 1;
Object(引用类型)
较为复杂以后再进行探究。
null ,undefined,NaN的区别
当我们声明一个值类型的变量没给它赋值时,系统会自动给它赋一个undefined,无需我们手动赋值,我们应该避免手动给一个变量赋予undefined。null是当我们想声明一个对象但是又不想给它赋初值的时候的一个占位符,和undefined不同的是我们要手动赋予null,系统不会自动赋值null,这也区分引用类型和值类型的一种手段。NaN表示当计算不合法时返回的一个值,可以当作是一种错误处理机制。