• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

JavaScript中的数据类型

互联网 diligentman 1周前 (11-20) 6次浏览

JavaScript中每一个值,都属于某一种数据结构,JavaScript中的数据类型有七种,分别为:

  • undefined:表示已声明但未定义或未赋值
  • null:表示空值
  • Boolean:表示布尔值,只存在true(真)和false(假)两种值
  • object:表示对象,复杂数据类型
  • string:表示字符
  • number:表示数值
  • symbol:表示当前类型的唯一性,属于Es6新增,本文暂不涉及

而在JS中原始数据类型只有六种分别是undefined,null,boolean,string,number,symbol(Es6新增),object包含有object、array、date等,所以他属于引用数据类型

undefined和null

在阮一峰老师的JavaScript教程中对两个值做出了如下解释

null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误

undefined表示“未定义”,即已声明但是并未赋值
他们两个都可以表示没有,含义非常的接近

undefined==null  //true
undefined===null//false

上面代码中在两个值进行等同比较时返回的结果为ture,只有当恒等的时候才为false,可见这两个值有多么的相似。

而为什么上述代码中,在恒等时候回返回false呢?其实在JavaScript的最初版本是这样区分的:

  • null是一个表示"无"的对象,转为数值时为0

  • undefined是一个表示"无"的原始值,转为数值时为NaN所以null和undefined基本是同义的,只有一些细微的差别。

Boolean

boolean表示布尔值,主要用于逻辑判断,布尔值只有true(真)和false(假)这两个返回值,用typeof检查一个布尔值时会返回boolean

  • 在运算符中前置逻辑运算符,相等运算符,比较运算符会返回为布尔值。

  • 而如果某个位置预期会转化成布尔值,在JavaScript中以下六种情况也会返回为false,其他值都会为true

undefined?true:false;  //false
null?true:false;  //false
0?true:false;  //false
false?true:false;  //false
""?true:false;  //false
NaN?true:false; //false

String

string表示字符串,就是零个或多个排在一起的字符,放在单引号或双引号之中。

var s="hello word";
var s1='hello word';

反斜杠()在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。需要用反斜杠转义的特殊字符,主要有下面这些:

  • :null
  • b :后退键
  • f :换页符
  • n :换行符
  • r :回车键
  • t :制表符
  • v :垂直制表符
  • ’ :单引号
  • " :双引号
  • :反斜杠
var s2="hello";
console.log(s2[0]);  //h
console.log(s2[1]); //e
console.log(s2[2]); //l
console.log(s2[3]); //l
console.log(s2[4]); //o
console.log(s2[5]);  //undefined
console.log(s2.length);  //5

例如上面代码,在字符串中字符是以字符数组形式存储的,所以用数组的形式访问字符串也可以访问到,但是这样访问到的数值只能具有只读性,而无法更改。

a[0]='w';
a  //hello

number

number表示数值,包括整数和浮点数,并且所有数字都是以64位浮点数形式储存。

var num=10 ;
var num1=0.1;
var num2=0.2;

由于在JavaScript中浮点数不是精确的值,所以在比较浮点数时要特别的小心,

num1+num2===0.3 //false
0.3/num1 //2.9999999999999996

在JavaScript中64位浮点数的指数部分的长度是11个二进制位,意味着指数部分的最大值是2047。也就是说,64位浮点数的指数部分的值最大为2047,分出一半表示负数,则JavaScript能够表示的数值范围为21024到2-1023,超出这个范围的数无法表示。

如果一个数大于等于2的1024次方,那么就会发生“正向溢出”,即 JavaScript 无法表示这么大的数,这时就会返回Infinity。

Math.pow(2, 1024) // Infinity

如果一个数小于等于2的-1075次方,那么就会发生为“负向溢出”,即 JavaScript 无法表示这么小的数,这时会直接返回0。

Math.pow(2, -1075) // 0

NaN(not a number)是JavaScript中的一个特殊值,表示为"非数字"。

1–"a" //NaN
1/"a" //NaN
0/0 //NaN

上面代码运行时,会自动将字符串x转为数值,但是由于x不是数值,所以最后得到结果为NaN,表示它是“非数字”(NaN)。

NaN===NaN //false

上面代码中,可以看得出NaN不等于任何值,包括它本身

object

object表示对象,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合

创建对象的方式通常有两种方式:构造函数和对象字面量

构造函数创建:

var obj = new Object();
obj.name = "last code";
obj.age =18;
obj.sex="男";
}

字面量创建:

var obj1 = {
      name="last code",
      age=18,
      sex="男"
};

在对象中,读取属性的方法有俩种方法,分别是:

obj.name // "last code"
obj['name'] // "last code"

请注意,如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。

在对象中不仅可以读取值还可以赋值,例如:

obj.hobby="玩游戏";
obj["height"]=1.88;

在对象中查看对象的所有值可以用Object.keys(对象名)的方法。

Object.keys(obj1)  //['name','age','sex']

在对象中查看属性是否存在可以用:in 运算符

'name' in obj // true
'sex' in obj //true

注意,in不能识别哪些属性是对象自身的,哪些属性是继承的

属性的遍历可以用for…in

for (var i in obj1) {
  console.log('键名:', i);
  console.log('键值:', obj1[i]);
}
//键名: name
// 键值:last code
// 键名:sex
// 键值:10
// 键名:age
// 键值:男

注意它遍历的是对象所有可遍历的属性,会跳过不可遍历的属性,它不仅会遍历对象自身的属性,还遍历继承的属性


喜欢 (0)