二.js数据类型

看过阮一峰的JavaScript教程之后,深有感触,为了对自己所学的知识进行巩固,因此写下了这篇博客。

一、js的数据类型

在es6中js的数据类型有七种:number、string、boolean 、Symbol、null、undefined、object.
typeof运算符可以用来判断一个值的数据类型
1.typeof 1 =number;
2.typeof ‘a’ =string;
3.typeof true=boolean;
4.typeof null=object;
5.typeof undefined=undfined;
6.typeof function(){}=function;
7.typeof {1:3}=odject;

1.number

JavaScript 内部的数字都是以(64位的)浮点数存在的。需要整数时对应的数字会转换成32位的整数。
1.数值的表示
科学计数法
123e3 // 123000
123e-3 // 0.123
当符合一下情况时,用科学计数法表示。
(1)小数点前的数字多于21位。
(2)小数点后的零多于5个。
除此之外用直接字面量表示。
2.数值的进制
通常情况下都是十进制。
0xff // 255 十六进制
0o377 // 255 八进制
0b11 // 3 二进制
3.NaN非数字,是number的特殊值。
NaN和任何值都不相等,包括自身。
NaN和任何值运算都是NaN。
不能使用indexof运算符。
4.与数字相关的全局方法
1.paresInt()用于将字符串转换成整数,不是字符串的会先转换成字符串。开头的空格会被忽略。
返回值:十进制数字/NaN
2.parseFloat()用于将一个字符串转为浮点数。
返回值:十进制数字/NaN
3.number(),他比parseInt90更为严格,parseInt单个字符解析,number()是将整个看做整体进行解析
* 使用 Number 作为函数来转换 Date 对象为数字值:

var d = new Date("December 17, 1995 03:24:00");
print(Number(d));
这将输出 "819199440000"
*转换数字字符串为数字
Number("123")     // 123
Number("")        // 0
Number("0x11")    // 17
Number("0b11")    // 3
Number("0o11")    // 9
Number("foo")     // NaN
Number("100a")    // NaN

4.isNaN()用来判断一个值是否为NaN.只对数值有效,如果传入其他值,会被先转成数值
对于空数组和只有一个元素的数组会返回false。
5.isFinite()方法返回一个布尔值,表示某个值是否为正常的数值。

isFinite(Infinity) // false
isFinite(-Infinity) // false
isFinite(NaN) // false
isFinite(undefined) // false
isFinite(null) // true
isFinite(-1) // true

2.字符串

字符串是字符数组的集合用单引号或者双引号括起来
1.如果在是字符串内部使用符号,需要在符号前面加上转义符\
2.如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。

var longString = 'Long \
long \
long \
string';

或者使用+好链接
在es6中使用 反引号`
3.需要用反斜杠转义的特殊字符,主要有下面这些。

\0 :null(\u0000)
\b :后退键(\u0008)
\f :换页符(\u000C)
\n :换行符(\u000A)
\r :回车键(\u000D)
\t :制表符(\u0009)
\v :垂直制表符(\u000B)
\' :单引号(\u0027)
\" :双引号(\u0022)
\\ :反斜杠(\u005C)

4.符串内部的单个字符无法改变和增删,这些操作会默默地失败。

三、null (空)和 undefined(未定义)

null与undefined都可以表示“没有”,含义非常相似。
1.变量没有值-undefined
2.空对象-null
3.非对象不想给值-undefined

四、boolean

下面六个值被转为false,其他值都视为true。

undefined
null
false
0
NaN
""''(空字符串)

五、对象(哈希表)

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

1.生成方法

var obj ={}\new object();

2.键名

1.当键名符合标识符规则时,可以不用引号。如果相似用特殊符号则需要引号。
2.如果键名是数值,会被自动转为字符串。
3.

var obj = {
  1: 'a',
  3.2: 'b',
  1e2: true,
  1e-2: true,
  .234: true,
  0xFF: true
};

obj
// Object {
//   1: "a",
//   3.2: "b",
//   100: true,
//   0.01: true,
//   0.234: true,
//   255: true
// }

obj['100'] // true

上面代码中,对象obj的所有键名虽然看上去像数值,实际上都被自动转成了字符串。

3.对象的引用

var a =obj1;
a存储的是odj1对象的地址值。称a引用了对象。
1.如果a\b同时引用了同一对象,单独修改会相互影响。

4.对象属性的操作

点运算符和方括号运算符
1.使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
2.注意,数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符。
3.在键名符合标识符规则的情况下才能使用点操作,并且点操作符会把键名转变成字符串(obj.name=obj[“name”])。
点运算符和方括号运算符都可以增加对象的属性或者读取对象属性。

关于对象属性的其他操作

1.delete obj.p 删除对象的p属性.
2.判断对象属性是否存在:in 运算符

p in obj

返回值:true/false
in运算符的一个问题是,它不能识别哪些属性是对象自身的,哪些属性是继承的。
这时,可以使用对象的hasOwnProperty方法判断一下,是否为对象自身的属性。

var obj = {};
if ('toString' in obj) {
  console.log(obj.hasOwnProperty('toString')) // false
}

3.for…in 循环 遍历对象属性
for…in循环用来遍历一个对象的全部属性。

var obj = {a: 1, b: 2, c: 3};

for (var i in obj) {
  console.log(i, obj[i]);
}

for…in循环有两个使用注意点。

它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
它不仅遍历对象自身的属性,还遍历继承的属性。
遍历的顺序是随机的。
一般情况下,都是只想遍历对象自身的属性,所以使用for…in的时候,应该结合使用hasOwnProperty方法,在循环内部判断一下,某个属性是否为对象自身的属性。

var person = { name: '老张' };

for (var key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key);
  }
}

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,顺序与手动遍历该对象属性时的一致。

var a={"a":1,"name":"wanag",age:"23"}
undefined
Object.keys(a)
// ["a", "name", "age"]

4.with 语句
with语句的格式如下:

with (对象) {
语句;
}
它的作用是操作同一个对象的多个属性时,提供一些书写的方便。

// 例一
var obj = {
  p1: 1,
  p2: 2,
};
with (obj) {
  p1 = 4;
  p2 = 5;
}
// 等同于
obj.p1 = 4;
obj.p2 = 5;

注意:with对对象不存在的属性进行赋值操作时,会创造一个当前作用域的全局变量。所以with语句应先给对象创建属性。
with区块没有改变作用域,它的内部依然是当前作用域。这造成了with语句的一个很大的弊病,就是绑定对象不明确。建议不要使用with语句。

猜你喜欢

转载自blog.csdn.net/wang_liuyong/article/details/81265173