陪你读书-JS-第十期总结
1.JS中数据类型
基础数据类型:string、number、boolean、undefined、null
复杂数据类型:object
2.三个开发上的建议
- 当你需要新建一个变量并且需要赋值,或者新建一个对象需要为对象的属性赋值时,可以用null
- 但判断一个函数的某一个参数是否传入的时候通常使用
=== 'undefined'
进行判断 - 检测某一个值是否存在或者是否为null用
=== null
进行判断
3.只有6个值在进行bool类型转换的时候可以转换为false
这6个值为:undefined、null、 +0、-0、’’、NaN 空数据和{}为true
Boolean(undefined) // false
Boolean(null) // false
Boolean(+0) // false
Boolean(-0) // false
Boolean('') // false
Boolean(NaN) // false
Boolean({}) // true
4.数值类型:常规的数字,无穷,NaN
- 小数:
0.1 + 0.2 != 0.3
原因为js表示数字时是用二进制表示数字的,可以这样计算:0.1x10 + 0.2x10 = 3 3/10 =0.3
- NaN: not a number 是一个不等于任何数字的数字类型,
typeof(NaN)= “number”
,NaN !== NaN
,它是唯一一个不等于它本身的数字 - 字符串:本质是一个unicode编码的序列,length属性返回的是unicode编码的长度,一个汉字返回的长度是1
- 理论上只有对象(Object)可以使用属性和方法的引用,字符串引用方法时,会先判断表达式是不是对象,若不是对象,就会直接报错,在所有的基本类型中,只有
null
和undefined
不能转换为对象(Object) - 复杂数据类型:object,是由属性和属性的值所组成的无序列表的合集
5.对象和原始类型的区别
- 对象有属性
- 对象有方法:方法本身是一种特殊的方法
- 对象是可以改变的
6.对象的分类
- 常用对象:String,Boolean,正则表达式,Object,Number,Function,Array,Date
- 内置对象:Global,Math,Json 与其他对象的区别就是,如果使用内置对象的时候是不需要用new操作符的,可以直接使用
- 数组对象:Windows,和JS本身运行环境有关系的
- 自定义对象:
7.基础数据类型和对象的转化
详细强戳:JavaScript 中数据类型转换
8.变量定义
使用var: 局部变量(作用于是当前的函数),创建的变量不可删除,变量会被提前
不使用var: 全局变量,创建的变量可以删除(windows上面的一个属性),变量不会被提前
9.一元操作符:很高的优先级,仅在. , () []之后
(1)、+、-、前++、后++、前–、后–、!、typeof、void、delete,typeof后面的括号()最好写上,!转换成布尔值;
Boolean(3) == !!(3) // true
String(3) == 3 + '' // true
+'123' == Number(123) // true
delete 运算符删除对以前定义的对象属性或方法的引用。例如:
var o = new Object;
o.name = "David";
alert(o.name); //输出 "David"
delete o.name;
alert(o.name); //输出 "undefined"
在这个例子中,删除了 name 属性,意味着强制解除对它的引用,将其设置为 undefined(即创建的未初始化的变量的值)。
delete 运算符不能删除开发者未定义的属性和方法。例如,下面的代码将引发错误:
delete o.toString;
即使 toString
是有效的方法名,这行代码也会引发错误,因为 toString()
方法是原始的 ECMAScript 方法,不是开发者定义的。
一元加法和一元减法
尽管一元加法对数字无作用,但对字符串却有有趣的效果,会把字符串转换成数字。
var sNum = "20";
alert(typeof sNum); //输出 "string"
var iNum = +sNum;
alert(typeof iNum); //输出 "number"
(2)、位运算 NOT
位运算 NOT 由否定号(~)表示,它是 ECMAScript 中为数不多的与二进制算术有关的运算符之一。位运算 NOT 实质上是对数字求负,然后减 1,
(3)、逻辑 NOT(!)逻辑 NOT 运算符返回的一定是 Boolean 值。
逻辑 NOT 运算符的行为如下:
- 如果运算数是对象,返回 false
- 如果运算数是数字 0,返回 true
- 如果运算数是 0 以外的任何数字,返回 false
- 如果运算数是 null,返回 true
- 如果运算数是 NaN,返回 true
- 如果运算数是 undefined,返回 true
!{} // false
!0 // true
!3 // false
!null // true
!NaN // true
!undefined // true
10.二元操作符
&& 、||、+、-、x、/
1.加法运算符
与乘性运算符一样,在处理特殊值时,ECMAScript 中的加法也有一些特殊行为:
1 + NaN = NaN
-Infinity + -Infinity = Infinity
Infinity + -Infinity = NaN
+0 + +0 = +0
-0 + +0 = +0
-0 + -0 = -0
undefined + true = NaN
null + false = 0
1 + false = 1
1 + true = 2
{name: '张三'} + {age: 24} = [object Object][object Object]
不过,如果某个运算数是字符串,那么采用下列规则:
- 如果两个运算数都是字符串,把第二个字符串连接到第一个上。
'hello' + 'word' // helloword
- 如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。
'hello' + 123 // hello123
- 注意:为了避免 JavaScript 中的一种常见错误,在使用加法运算符时,一定要仔细检查运算数的数据类型。
2.减法运算符
在处理特殊值时,减法运算符也有一些特殊行为:
console.log(1 - NaN) // NaN
console.log( Infinity - Infinity) // NaN
console.log( -Infinity - -Infinity) // NaN
console.log( Infinity - -Infinity) // Infinity
console.log( -Infinity - Infinity) // -Infinity
console.log(+0 - +0) // +0
console.log(-0 - -0) // -0
console.log(+0 - -0) // +0
console.log('hello' - 12) // NaN(某个运算符不是数字,也不能强制转化为数字)
3.逻辑 AND 运算符( && ),
逻辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。
如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值:
- 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
- 如果两个运算数都是对象,返回第二个对象。
- 如果某个运算数是 null,返回 null。
- 如果某个运算数是 NaN,返回 NaN。
- 如果某个运算数是 undefined,返回undefined 。
4.逻辑 OR 运算符( || )
与逻辑 AND 运算符相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算并不一定返回 Boolean 值:
- 如果一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象。
- 如果两个运算数都是对象,返回第一个对象。
- 如果最后一个运算数是 null,并且其他运算数值均为 false,则返回 null。
- 如果最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN。
- 如果某个运算数是 undefined,则根据另一个运算数返回。
undefined || null // null
null || undefined // undefined
undefined || 0 // 0
0 || undefined // undefined
undefined || 123 // 123
undefined || 'hello' // 'hello'
5.关系运算符< >
返回的结果是boolean类型,更偏向于数字的操作,任何包含 NaN 的关系运算符都要返回 false
6.等性运算符
ECMAScript 提供了两套等性运算符:等号和非等号用于处理原始值,全等号和非全等号用于处理对象。
===
全等:数据类型和值完全一致
==
相等:undefined == null
,数字,字符串,boolean类型进行比较时,先转换为数字再进行比较,等号和非等号( ==
, !=
)
- 在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回
true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回
true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。 执行类型转换的规则如下:- 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
- 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
- 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
- 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
在比较时,该运算符还遵守下列规则: 值 null 和 undefined 相等。 在检查相等性时,不能把 null 和 undefined 转换成其他值。 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。
重要提示: 即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。 全等号和非全等号
- 全等号由三个等号表示(
===
),只有在无需类型转换运算数就相等的情况下,才返回 true。