1、解释型语言,动态类型、弱类型的语言
在运行的时候将程序翻译成机器语言,在运行期间才去做数据类型检测;解释型语言在运行时需要解释器,JS的解释器被称为JavaScript引擎,是浏览器的一部分。
2、入门
请注意,JavaScript严格区分大小写。
要特别注意相等运算符==
。JavaScript在设计时,有两种比较运算符:
第一种是==
比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===
比较,它不会自动转换数据类型,如果数据类型不一致,返回false
,如果一致,再比较。
由于JavaScript这个设计缺陷,不要使用==
比较,始终坚持使用===
比较。
2.1数据类型number
JavaScript不区分整数和浮点数,统一用Number表示。
NaN
这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN //false
唯一能判断NaN
的方法是通过isNaN()
函数:
isNaN(NaN); // true
浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:
1 / 3 === (1 - 2 / 3); // false Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
2.2字符串类型(String)
需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果
concat()将两个字符串连接起来,返回一个连接后的字符串。
indexOf()返回子串第一次出现的索引。
charAt()返回指定位置的字符。要获取字符串某个指定位置的字符,使用类似Array的下标操作,索引号从0开始str(0)
lastIndexOf()返回子串最后一次出现的索引。
substring(i,j)截取字符串,i为开始位置,j为结束位置(不包含)
substr(i,j)截取字符串,i为起始位置,j为长度
slice(i,j)同substring
split()分割字符串,返回数组
length()返回字符串的长度
toLowerCase转化为小写
toUpperCase转化为大写
trim去除两端的空格
replace(i,j),将字符串中的i串全部替换为j
2.3布尔值
一个布尔值只有true
、false
两种值
要将一个值转换为其对应的boolean值,可以使用转型函数Boolean()。
console.log(typeof Boolean("s")) //boolean
以下是其他类型转换成Boolean类型规则
数据类型 |
转换为true的值 |
转换为false的值 |
String |
任何非空字符串 |
空字符串 |
Number |
任何非零数字值(包括无穷大) |
0和NaN |
Object |
任何对象 |
null |
Undefined |
|
undefined |
2.4null和undefined
Null类型是一个只有一个值的数据类型,即特殊的值null。它表示一个空对象引用,而typeof操作符检测null会返回object。
undefined是派生自null的,因此ECMA-262规定对它们的相等性测试返回true。
2.5对象类型
1、数组
toString()将数组转换为字符串
join()数组通过指定的分隔符拼接为字符串
push()在数组末尾添加一个元素,返回修改后的长度
pop()从末尾移除一个元素,修改数组的长度,返回被移除的元素
shift()从头部移除一个元素,返回被移除的元素
unshift()在数组的前端添加一个元素
reverse()逆向排序
sort()从小到大排序,如果没有使用参数,按字符编码排序;
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
(1)若 a 小于 b,排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
(2)若 a 等于 b,则返回 0。
(3)若 a 大于 b,则返回一个大于 0 的值。
concat()基于当前数组穿件新数组
var arr = [‘Lee‘, 21, ‘洛阳‘]; //当前数组 var arr2 = arr.concat(‘计算机编程‘); //创建新数组,并添加新元素 alert(arr2); //输出新数组 alert(arr); //当前数组没有任何变化
slice()方法可以基于当前数组获取指定区域元素并创建一个新数组。
splice()方法主要用途是向数组的中部插入元素。
arrayObject.splice(index,howmany,item1,.....,itemX)
参数 |
描述 |
index |
必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 |
howmany |
必需。要删除的项目数量。如果设置为 0,则不会删除项目。 |
item1, ..., itemX |
可选。向数组添加的新项目。 |
//splice删除 var arr = [‘‘Lee‘‘, 21, ‘洛阳‘]; //当前数组 var arr2 = arr.splice(0,2); //splice(0,2)从第0个元素开始,往后数两个元素(Lee,21) alert(arr2); //返回截取的元素 alert(arr); //当前数组被截取的元素被删除 //splice添加 var arr = [‘‘Lee‘‘, 21, ‘洛阳‘]; //当前数组 var arr2 = arr.splice(1,0,‘计算机编程‘,‘江苏‘); //没有截取,但插入了两条 alert(arr2); //在第2个位置插入两条 alert(arr); //输出 //splice替换 var arr = [‘‘‘Lee‘‘‘, 21, ‘洛阳‘]; //当前数组 var arr2 = arr.splice(1,1,100); //截取了第2条,替换成100 alert(arr2); //输出截取的21 alert(arr); //输出数组
2、Math
属 性 |
说 明 |
Math.E |
自然对数的底数,即常量e的值 |
Math.LN10 |
10的自然对数 |
Math.LN2 |
2的自然对数 |
Math.LOG2E |
以2为底e的对数 |
Math.LOG10E |
以10为底e的对数 |
Math.PI |
π的值 |
Math.SQRT1_2 |
1/2的平方根 |
Math.SQRT2 |
2的平方根 |
min()和max()
Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数;
Math.random()方法返回介于0到1之间一个随机数,不包括0和1。如果想大于这个范围的话,可以套用一下公式:
值 = Math.floor(Math.random() * 总数 + 第一个值)
方 法 |
说 明 |
Math.abs(num) |
返回num的绝对值 |
Math.exp(num) |
返回Math.E的num次幂 |
Math.log(num) |
返回num的自然对数 |
Math.pow(num,power) |
返回num的power次幂 |
Math.sqrt(num) |
返回num的平方根 |
Math.acos(x) |
返回x的反余弦值 |
Math.asin(x) |
返回x的反正弦值 |
Math.atan(x) |
返回x的反正切值 |
Math.atan2(y,x) |
返回y/x的反正切值 |
Math.cos(x) |
返回x的余弦值 |
Math.sin(x) |
返回x的正弦值 |
Math.tan(x) |
返回x的正切值 |
2.3Date()
var now = new Date();
//创建一个指定日期和时间的Date
对象
//就是JavaScript的月份范围用整数表示是0~11,这里传入5代表6月
//var now = new Date(2015, 5, 19, 20, 15, 30, 123);
now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST) now.getFullYear(); // 2015, 年份 now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月 now.getDate(); // 24, 表示24号 now.getDay(); // 3, 表示星期三 now.getHours(); // 19, 24小时制 now.getMinutes(); // 49, 分钟 now.getSeconds(); // 22, 秒 now.getMilliseconds(); // 875, 毫秒数 now.getTime(); // 1435146562875, 以number形式表示的时间戳