一、 数字
Javascript不区分整数值与浮点值, 在javascript中所有数字均用浮点数值表示。
当一个数字直接出现在Javascript程序中, 我们称为数字直接量
Math对象
提供复杂运算
Math.pow(2,53) 幂
Math.round(.6) 四舍五入
Math.ceil(.6)
向上取整
Math.floor(.6) 向下求整
Math.abs(-5) 绝对值
Math.max(x,y,z) 最大值
Math.min(x,y,z) 最小值
Math.random() 生成一个大于等于0小于1.0的伪随机数
Math.PI
圆周率
JavaScript中的算术运算在溢出, 下溢或被零整除时不会报错。
当数字运算结果超过了JavaScript所能表示的数字上限(溢出), 结果为一个特殊的无穷大(infinity)值。 在JavaScript中以Infinity表示。
当负数的值超过了JavaScript所能表示的负数范围。 结果为负无穷大。 -Infinity表示
下溢是当运算结果无限接近于零并比JavaScript能表示的最小值还小的时候发生的一种情形,这种情况下返回0, 当一个负数发生下溢时, 返回-0.
被零整除, 返回Infinity 或 -Infinity
零除以零 返回NaN
Infinity NaN 为全局变量
NaN 它和任何值都不相等。 isNaN() 判断一个值是否为NaN
isFinite() 在参数不是NaN, Infinity, -Infinity的时候返回true
正零与负零相等, 但作为除数,例外
var zero = 0;
var negz = -0;
zero === negz; //true
1/zero === 1/negz; //false Infinity !== -Infinity
二、 日期与时间
JavaScript语言核心包括Date()构造函数, 用来创建表示日期和时间的对象。
var then = new Date(2011,0,1);
//2011年1月1日
var later = new Date(2011,0,1,17,10,30); //同一天, 当地时间5:10:30pm,
var now = new Date(); //当前日期和时间
var elapsed = now - then; //日期减法, 计算时间间隔的毫秒数
later.getFullYear();
// => 2011
later.getMonth();
// => 0; 从0开始计数的月份
later.getDate();
// => 1; 从1开始计数的天数
later.getDay();
// => 5; 得到星期几, 0代表是星期日, 5代表是星期一
later.getHours();
// => 当地时间 17:5pm
later.getUTCHours(); //使用UTC表示小时的时间,基于时区
三、 文本
字符串直接量, 是由单引号或双引号括起来的字符序列
字符串直接量可以拆分成数行, 每行必须以反斜线(\)结束。
"two \
lines"
\n 表示一个转义字符
+ 符号 用于数字,表示两数相加。 字符串, 表示字符串连接。将第二个字符串拼接在第一个之后。
msg = "Hello, " + "world"; //生成字符串 "Hello, world"
要确定一个字符串的长度(其所包含的16位值的个数)可以使用字符串的length属性。 msg.length
字符串方法:
var s = "hello, world"
//定义一个字符串
s.charAt(0);
//=> "h" 第一个字符
s.charAt(s.length-1);
//=> "d" 最后一个字符
s.substring(1,4);
//=> "ell" 第2~4个字符
s.slice(1,4);
//=> "ell" 同上
s.slice(-3);
//=> "rld" 最后三个字符
s.indexOf("l")
//=> 2; 字符l首次出现的位置
s.lastIndexOf("l");
//=> 10; 字符l最后一次出现的位置
s.indexOf("l",3);
//=> 3 在位置3及之后首次出现字符l的位置
s.split(", ");
//=> ["hello", "world"]分割成子串
s.replace("h", "H");
//=> "Hello, world" 全文字符替换
s.toUpperCase() //=> "HELLO, WORLD"
在JavaScript中字符串是固定不变的。 类似replace(), toUpperCase()的方法都返回新字符串, 原字符串本身并没有发生改变
四、 模式匹配
JavaScript定义了RegExp()构造函数.正则表达式
/^HTML/
//匹配以HTML开始的字符串
/[1-9][0-9]*/
//匹配一个非零数字, 后面是任意个数字
/\bjavascript\b/i //匹配单词"javascript", 忽略大小写
var text = "testing: 1, 2, 3";
//文本示例
var pattern = /\d+/g; //匹配所有包含一个或多个数字的示例
pattern.test(text); //=> true; 匹配成功
text.search(pattern)
//=>9 首次匹配成功的位置
text.match(pattern) //=>["1","2","3"]; 所有匹配组成的数组
text.replace(pattern, "#"); //=>"testing: #, #, #"
text.split(/\D+/); //=>["","1","2","3"];用非数字字符截取字符串
五、 布尔值
下面这些值会被转换成false
undefined, null, 0, -0, NaN, ""//空字符串
&& 与
|| 或
! 非
null typeof null //=> object
undefined 表示变量没有初始化
type undefined /=> undefined
null == undefined //=> true
六、 全局对象
全局属性: undefined, Infinity, NaN
全局函数: isNaN(), parseInt(), eval()
构造函数: Date(), RegExp(), String(), Object(), Array()
全局对象: Math, JSON
在代码的最顶级(不在任何函数内的JavaScript代码)可以使用JavaScript关键字this来引用全局对象
var global = this; //定义一个引用全局对象的全局变量
如: global.Math.pow()
在浏览器窗口中的所有JavaScript代码中。 Window对象充当了全局对象。这个全局Window对象有一个属性window引用其自身, 它可以代替this来引用全局对象。
七、 包装对象
String(), Number(), Boolean()
存取字符串, 数字或布尔值的属性时创建的临时对象称做包装对象
可通过String(), Number(), Boolean()构造对象显式创建包装对象
var s = "test", n=1, b=true //一个字符串,数字和布尔值
var S = new String(s);
//一个字符串对象
var N = new Number(n);
//一个数值对象
var B = new Boolean(b);
//一个布尔值
JavaScript会在必要时将包装对象转换成原始值, 因此上段代码中的对象S, N 和 B常常(但不总是)表现的和值s, n和b 一样。
“==” 等于运算符将原始值和其包装对象视为相等。
“===” 全等运算符将它们视为不等
typeof运算符可以看到原始值和其包装对象的不同