1. 七种数据类型
- number 数值 :整数和小数
- string字符串 : 文本
- boolean布尔值 :true false
- undefined :未定义或不存在
- null :空值
- object对象 : 值的集合
- symbol
前五种是基本类型
对象包括: object 、 array数组 、function函数
2. typeof 运算符 typeof 可以用来检查一个没有声明的变量,而不报错。
数值 : number
字符串 :string
布尔值 :boolean
函数 :function
undefined :undefined
null : object
3.null 和 undefined
区别:null是一个空值 转为数值时为0
undefined 是一个表示 “此处未定义” 的原始值,转为数值时为 NaN
在 if 语句中两个都是 false
相等运算符(==)甚至直接报告两者相等
用法和含义
调用函数时,某个参数未设置任何值,传入null,表示参数为空
undefined 未定义
- 变量声明,但未赋值
- 调用函数时,应该提供的参数没有提供,该参数等于undefined.
- 对象没有赋值的属性
- 函数没有返回值,默认返回undefined
4. 布尔值 true false
- 两元运算符 &&(and) //(or)
- 前置逻辑运算符 ! (not)
- 相等运算符 === == !== !=
- 比较运算符 > < >= <=
一般用于程序流程的控制
空数组([])和空对象({})对应的布尔值,都是true
五个falsy值 其他都为true
undefined null 0 NaN ' '(空字符串) false
5. Number
所有数字都是以64喂浮点数储存
数值精度
第一位 : 符号位 0 正 1 负
第2到12位: 指数部分
第13到64位:小数部分 (有效数字)
数值范围:21024~2-1023
a> 2^1024 正向溢出 返回Infinity
a< 2^-1075 负向溢出 返回0
数值的表示法
科学计数 :
123e3 //123000 123e-3 //0.123
自动转为 小数点后的0 多余5
(0.0000003 //3e-7)
小数点前的数字多余21位
数值的进制
2 8 10 16 进制
十进制 : 没有前导 0的数字
八进制: 0o 或0O的数值 或有前导0 只用到0-7的数值 0o377 // 255
十六进制 : 0x或0X的数值 0xff //255
二进制: 有前缀0b 或0B的数值 0b11 // 3
特殊字符 0
正零 和 负零
+ 0 === -0 //true
唯一区别: 坐分母时返回值不一样
1/+0 // +Infinity 1/-0 //-Infinity 无穷
NaN
表示 非数字 数据类型是Number
0/0 // NaN
运算规则
- NaN不等于任何值,包括自身
- NaN 布尔运算是false
- NaN与任何值运算都是 NaN
- 数组的indexof方法内部使用的是严格相等运算符,该方法对NaN不成立
6. Boolean 字符串
概述:就是多个或单个拍在一起的字符放在单引号或双引号中。
- 单引号中使用多引号 双引号中使用单引号
" ' ' " ' " " '
- 字符串默认写在一行,分成多行会报错
- 多行字符串写法
var long ='long'
+ 'long'
+ 'string';
var long = 'long\
long\
string`;
转义符
\0 :null(\u0000) \b :后退键(\u0008)
\f :换页符(\u000C) \n :换行符(\u000A)
\r :回车键(\u000D) \t :制表符(\u0009)
\ v :垂直制表符(\u000B) \ ' :单引号(\u0027)
\ " :双引号(\u0022) \ \ :反斜杠(\u005C)
length 属性
返回字符串的长度,属性无法改变
Base 64 转码
btoa() : 任意值转为 Base64 编码
atob(): Base64编码转为原来的值
7. 对象 Object
概述 ; 对象就是一组 "键值对" 的集合,无序的复合数据类型
对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。
- 键名是数值,自动转为字符串
- 键名不符合标识符的条件,也不是数字,必须加引号。
- 键名 都是 属性,键值可以是任何数据类型
对象的引用
如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。
如果取消某一个变量对于原对象的引用,不会影响到另一个变量
var o1 = {};
var o2 = o1;
o1 = 1;
o2 // {}
表达式还是语句
- 行首是大括号,一律解释为代码块。
- 如果解释为表达式,在大括号外加上圆括号。
eval('{foo: 123}') // 123
eval('({foo: 123})') // {foo: 123}
如果没有圆括号,eval将其理解为一个代码块;加上圆括号以后,就理解成一个对象。
属性的操作
一种是使用点运算符,还有一种是使用方括号运算符
var obj = {
p: 'Hello World'
};
obj.p // "Hello World"
obj['p'] // "Hello World"
- 如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
- 数字键可以不加引号,因为会自动转成字符串
- 数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符
属性的赋值
点运算符,还有一种是使用方括号运算符
var obj = {};
obj.foo = 'Hello';
obj['bar'] = 'World';
Object.keys 查看所有属性
delete 命令 delete obj.width
delete命令用于删除对象的属性,删除成功后返回true
- 删除一个不存在的属性,delete不报错,而且返回true
- 只有一种情况delete命令会返回false,那就是该属性存在,且不得删除
- delete命令只能删除对象本身的属性,无法删除继承的属性
delete返回true,该属性依然可能读取到值 >>(继承的属性)
in 运算符
in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。
它不能识别哪些属性是对象自身的,哪些属性是继承的。
var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true
for…in 循环
for...in循环用来遍历一个对象的全部属性。
它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
它不仅遍历对象自身的属性,还遍历继承的属性。
with 语句 不推荐使用
with语句的格式如下:
with (对象) {
语句;
}
var obj = {
p1: 1,
p2: 2,
};
with (obj) {
p1 = 4;
p2 = 5;
}
// 等同于
obj.p1 = 4;
obj.p2 = 5;
如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量。