类型,值,和变量
前言:计算机程序的运行需要对值(value)比如数字3.14或文本”hello,world”进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特性就是支持多种数据类型.当程序需要将值保持起来以备将来使用时,便将其赋值给(将值”保存”到)一个变量(variable).变量是一个值的符号名称,可以通过名称获得对值的引用.变量的工作机制是变成语句的另一个基本特征.
前言:JavaScript的数据类型分为两类:原始类型和对象类型。5种原始类型:数字、字符串、布尔值、null(空)、undefined(未定义)。对象是属性的集合,每个属性都由“名/值对”(值可以是原始值、也可以是对象)构成。三个比较特殊的对象:全局对象、数组、函数。JavaScript语言核心还定义了三种有用的类:日期(Date)类、正则(RegExp)类、错误(Error)类。
一.数字
JS中不区分整数值和浮点数值.JS可以识别十进制整型直接量(所谓直接量,就是程序中直接使用的数据值),和16进制值(以0x或0X为前缀,那个是数字0不是字母o.动动脑子就知道,如果那是一个字母o的话,那么一个十六进制值不就成了一个标识符了吗).尽管ECMAScript标准不支持八进制直接量,但JS的某些实现可以采用八进制形式表示整数(以数字0为前缀),在IE,火狐,谷歌的浏览器上使用八进制给一个变量赋值没问题.但是ECMAScript6的严格模式下,八进制直接量是命令禁止的.
浮点型直接量有两种写法:
(1)传统的实数写法:有整数部分,小数点和小数部分组成
(2)指数计数法:即在实数后跟字母e或E,后面跟正负号,其后在跟一个整型的指数.
算术运算的溢出
JS中算术运算在溢出,下溢或被0整除时不会报错.
溢出:当运算结果超出了JS所能表示的数字上限,结果为正无穷大或负无穷大.无穷大值的行为特性也符合现实:基于他们进行的加减乘除运算结果还是无穷大(当然保留他们的正负号).
下溢:当运算结果无限接近零并币JS能表示的最小值还小的时候发生的情况.这种情况下,就会返回0.当一个附属发生下溢时返回特殊值”负零”.负零和正零基本是相等的(甚至可以使用严格相当===来测试),除了作为除数之外:
案例:
var zero=0; //正零值
var negz=-0; //负零值
zero===negz;//表达式返回值为true
1/zero===1/negz; //表达式返回值false,等价于正无穷大和负无穷大是否严格相等
被0整除会返回正无穷大或负无穷大值.但0除以0会返回NaN(JS预定义对象Number的NaN属性的值).返回.NaN有四种情况:
(1).0除以0
(2)无穷大除以无穷大
(3)给任意负数做开方运算
(4)算术运算符鱼不是数字或无法转换为数字的操作数一起使用时.
NaN值有一个特定:它和任何值都不想等,包含自身.判断一个变量X是否为NaN的两种方法:
(1).使用函数isNaN()
(2)使用x!=x判断,当且仅当x为NaN是,表达式的结果才是true. JS中还有一个类似的函数IsFinite(),在参数不是NaN,Infinity或-Infinity的时候返回true/
二进制浮点数和四舍五入
众所周知,实数有无数个,但JS通过浮点数的形式只能表示其中有限个数.什么意思呢,就是说,在JS中使用实数的时候,常常只是一个真实值的一个金斯表示.JS采用了IEEE-754浮点数表示法,这是一种二进制表示法,可以精确的表示1/2,1/8和1/10244等这样的分数,但是十进制分数1/10,1/100等并不能精确表示.例如:
var x=0.3-0.2; //x=0.99999999999998
var y=0.2-0.1; //y=0.1
x==y; //false
x==0.1; //false
y==0.1; //true
0.1==0.1; //true
var z=x+y; //z=0.199999999998
到底是个什么JB意思我愣是没看明白.反正不常用.
二.文本
字符串,字符集
字符串时一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集.字符串的长度使其所含16位值的个数.JS通过字符串类型来表示文本.注意:JS中并没有表示单个字符的”字符型”.要表示一个16位值,只需要将其赋值给字符串变量即可.
JS采用UTF-8编码的Unicode字符集,JS字符串时由一组无符号的16位值组成的序列.那些不能表示为16的Unicode字符则遵循UTF-16编码规则用两个16位组成一个序列(或称为”代理项对”)表示.这意味着一个长度为2的JS字符串有可能表示一个Unicode.注意:JS定义的各式字符串的操作方法均作用域16位值,而非字符,且不会对代理项对做单独处理.
字符串的定界符可以是单引号或者双引号.这两种形式的定界符可以嵌套,但是不能多层嵌套(比如,双引号可以包含单引号,这时单引号中不能再包含双引号了).一个字符串可以拆分成数行,每行必须以反斜线(\)结束,这时反斜线和行结束符都不算是字符串内容,即字符串本身并非是多行,只是写成了多行的形式.
注意:
(1).在JS中字符串是固定不变的(除非重新赋值),类似replace和toUpperCase()方法都返回新字符串,元字符串本身没有什么变化
(2)字符串可以当做只读数组,除了施工charAt()方法来查询一个单个字符,也可以使用方括号的方式来访问字符串中的单个字符(16位值).例如:
s=”hello,world”;
s[0]; //=>”h”
转义字符
转义字符 |
含义 |
\o |
NUL字符 |
\b |
退格 |
\t |
水平制表符 |
\n |
换行符 |
\v |
垂直制表符 |
\f |
换页符 |
\r |
回车符 |
\” |
双引号 |
\’ |
单引号或撇号 |
\\ |
反斜线 |
\xXX |
由两位十六进制数XX指定的Latin-1字符 |
-uXXXX |
由4位十六进制数XXXX指定的Unicode字符 |
注意:如果”\”字符位于没有在表中列出的字符前,则忽略”\”.比如”\#”和”#”等价.别忘了反斜线还有一个作用,就是多行字符串中每行结束处使用反斜线.
三.布尔值
在JS中的值都可以转换为布尔值.其中,null,undefined,0,-0,NaN,,””(空字符串),这六个值会被转换为false,false和这六个值有时称作”假值”;其他所有值,包括对象(数组)都会转换为true.true和这些值相应的被称为”真值”.注意:布尔值包含toString()方法,因此可以使用这个方法将字符创换成”true”或”false”,但它并不包含其他有用的方法.
版权声明:本文为博主原创文章,未经博主允许不得转载。