哪有时间学JavaScript ②数据类型、运算符
一 JavaScript常量、变量
一 基本组成结构
1.1 常量(字面量)
常量是一些不可改变的值:1、2、3、true、false、null、NaN、“hello”,
1.2 变量
变量可以用来保存字面量,变量的值是可以改变的,实际开发往往用变量来表示字面量
变量的声明和赋值: 使用var
关键字声明一个变量;使用=为变量赋值。
var a;
a = 1;
var b = 2;
1.1 关键字和保留字符
①关键字是预先规定的具有固定功能和意义的英语单词或单词的缩写,用户只能按预先规定的含义来使用它们,不可以自行改变其含义。
②保留字符是暂时未规定但未来会用到的字符(部分已规定),同样不可以自行改变其含义。
③其他不建议使用的字符
1.2 标识符
1.2.1 标识符定义
在JS中所有可以被自主命名的都称作标识符。
如:变量、函数、属性等。
1.2.2 标识符命名规则
①标识符由字母、下划线、美元符号或数字组成,第一个字符不能是数字;
②ECMAScript 标识符采用驼峰命名法:即大写字母标记逻辑断点,如mathGrades
;
③标识符不能是关键字和保留字符。
④JS底层保存标识符用的是Unicode
1.3 数据类型
JavaScript中一共有5种基本数据类型:
- 字符串型(String)
- 数值型(Number)
- 布尔型(Boolean)
- null型(Null)
- 未定义型(Undefined)
另外还有1种引用数据类型
- 对象型(Object)
1.3.1 字符串型(String)
字符串型(String)用双引号或者单引号表示。
引号不能嵌套,但可以双引号里放单引号、单引号里放双引号。
var a="yanqiu"
var a='yanqiu'
由于 JavaScript 已经赋予了双引号为字符串直接量的标识符,如果在字符串中包含双引号,就必须使用转义字符(Escape Character)来表示,例如:\n
表示换行符,\a
表示响铃符,\t
表示制表符等。
当对字符串进行错误运算时(如“123”*“123”),返回
NAN
,即not a number,属于数值型
1.3.2 数值型(Number)
在JS中,所有的数值(整数、浮点数)都是数值型(Number)。
注意:123
是数值型 "123"
是字符串型。我们可以通过运算符typeof
检查一个变量的数据类型
- 可以通过
Number.MAX_VALUE
得到JS数值型最大值、最小值1.7976931348623157e+308和-1.7976931348623157e+308;如果超出最大值、最小值则会返回Infinity
(正无穷)和-Infinity
(负无穷),属于数值型;- 可以通过
Number.MIN_VALUE
得到最大精度5e-324;如果超出最大精度则会返回0。- 另外,JS在浮点数计算时同样会得到不够精确的结果
<script>
console.log(Number.MAX_VALUE)
</script>
二进制:0b 开头表示二进制,但是,并不是所有的浏览器都支持
八进制:0 开头表示八进制
十六进制:0x 开头表示十六进制
输出时不同浏览器转换为不同进制,可以在使用时加上,10``,8
来区分
1.3.3 布尔型(Boolean)
布尔型(Boolean)是逻辑判断结果
- true
- false
1.3.4 null型(Null)
null型(Null)只有一个值:null。
null型专门用来表示空对象,所以用
typeof
检查会返回object
1.3.5 未定义型(Undefined)
当声明变量但未赋值时,它的值就是undefined。
undefined用
typeof
检查会返回undefined。
undefined值实际上是由null值衍生出来的,所以如果比较undefined和null是否相等,会返回true。
1.3.6 对象型(Object)
二 强制类型转换
强制类型转换指将一个数据类型强行转换为其他数据类型
2.1 转换为String类型
2.1.1 调用toString()方法
格式:变量名.toString()
该方法不会改变原变量的数据类型,只将改变后的结果返回。
<script>
var a=123;
var a=a.toString();
</script>
null和undefined这两个值没有toString()方法,如果调用它们的方法,会报错。
2.1.2 toString函数
格式:toString(变量名)
该方法将被转换的数据作为参数传递给函数
<script>
var a=123;
var a=toString(a);
</script>
toString函数可以对null和undefined转换
使用String()函数做强制类型转换时,对于Number和Boolean实际上就是调用的toString()方法,但是对于null和undefined,就不会调用toString()方法,它会将 null 直接转换为 “null”,将 undefined 直接转换为 “undefined”。
2.2 转换为number类型
2.2.1 Number函数
格式:Number(变量名)
<script>
var a="123"
a=Number(a);
console.log(a);
</script>
如果变量中含有非数字字符或者Undefined型,则返回NAN;
如果字符串无内容或纯空格,则返回0;
Boolean型true
转为1,false
转为0;
2.2.2 Parse
这种方式专门用来对付字符串,函数方法无法提取出非纯数字字符串中的数字,对于这种情况我们可以使用Parse
ParseInt可以转化为整数;(遇非数字停,可以利用它取整)
ParesFloat可以转化为小数;
<script>
var a="123abc"
a=parseFloat(a);
console.log(a); //输出123
</script>
如果对非String使用parseInt()或parseFloat(),它会先将其转换为String然后在操作
2.3 转换为Boolean
2.3.1 Boolean()函数
将其它的数据类型转换为Boolean,只能使用Boolean()函数。
格式:Boolean(变量名)
数字 —> 布尔
除了0和NaN,其余的都是true
字符串 —> 布尔
除了空串,其余的都是true
对象转换为true
null和undefined都会转换为false
2.4 隐式类型转换
为任意数据类型做两次非运算,转换为Boolean值
三 运算符
运算符也叫操作符,可以对操作对象进行运算
3.1 算术运算符
算术(Arithmetic)运算包括加、减、乘、除、求余、取负数等,分别使用运算符+
、-
、*
、/
、%
和-
来表示
+
运算符表示加时,任意数据类型的数据与字符串运算时的时候,那个+
号就是连接符转化为String型(可以用+“”
的方式转化为String型)
-
、*
、/
、%
则任意数据类型的数据与Number型运算时,都会转换为Number型再进行运算(可以用-“”
的方式转化为Number型)
任何数值与NaN运算都会返回NaN
当
+
、-
表示正负时,会先将操作对象转为Number型,然后再进行运算
JavaScript中的
/
不分整数除、小数除
3.2 自增、自减运算符
变量自增(Increment)运算符++
和自减(Decrement)运算符--
,其作用是使被操作的变量的值增加1或减少1。既可以放在变量的前面,称为前++(Prefix Increment)和前- -(Prefix Decrement);也可以放在变量的后面,称为后++(Postix Increment)和后–(Postix Decrement)结果不同。
3.3 逻辑运算符
逻辑运算符用于测定变量或值之间的逻辑。
①&& 与:JS中的“与”属于短路的与,如果第一个值为false
,则不会检查第二个值
非布尔值时:如果两个都为true,则返回第二个值。
②|| 或::JS中的“或”属于短路的或,如果第一个值为true
,则不会检查第二个值
非布尔值时:如果两个都为false
,则返回第二个值。
③! 非:!可以用来对一个值进行非运算,所谓非运算就是对一个布尔值进行取反操作,true
变false
,false
变true
。
非布尔值时:先会将其转换为布尔值,然后再取反,所以我们可以利用该特点,来将一个其它的数据类型转换为布尔值,可以为一个任意数据类型取两次反,来将其转换为布尔值,原理和Boolean()函数一样
3.4 赋值运算符
赋值(Assignment)运算符的功能是将一个表达式的值赋给一个变量,赋值运算符用=
号表示。
还提供另一种形式的赋值运算符,称为复合赋值(Combined Assignment)运算符。它由双目运算符与双目赋值运算符一起构成。
3.5 关系运算符
关系(Relational)运算是用来比较两个操作数的值的运算,比较的结果是一个Boolean值,即只能是“真”或“假”。若比较条件得到满足,则结果为真;否则,结果为假。关系运算共6种,包括:小于、小于或等于、大于、大于或等于、等于、不等于、全等,分别使用运算符<
、>
、>=
、==
和!=
、===
、!==
。
对于非数值参与运算时,会把非数值转化为数值进行比较
任何值和NaN比较都是false,包括它本身,判断是否是NaN用isNaN()函数
特例:undefined和null!=0但他俩相等
当两侧都是字符串时,比较第一位Unicode编码,如果一样,则比较下一位,所以比较两个字符串型数字时,一定记得转型
对于
===
、!==
,不会做自动类型转换,所以是用来判断一样不一样(包括格式)
null !==undefined
3.6 条件运算符
条件(Conditional)运算符用于进行简单的条件判断,它由两个符号?
和:
组成。
3.7 逗号运算符
逗号(Comma)运算符,是最简单的运算符了,它本身没有具体的计算功能,仅仅是将多个表达式连接在一起。
3.8 运算符的优先级
如何用Unicode编码输出字符
格式:在字符串中使用转义字符'\u+编码'
在网页中则是&#+编码;