每天一句:每个月要读一本书,离开学校了,你还要经常保持阅读的习惯,大学时候,考前的通宵达旦,说明你具备快速学习的能力,不要让这种能力钝化。
一、标识符&关键字&保留字
- 标识符,就是变量、函数、属性的名字,或者函数的参数,标示符规则
a、第一个字符必须是一个字母、下划线(_)或美元符($);
b、其他字符可以是字母、下划线、美元符或数字;
c、不能把关键字、保留字、true、false、null作为标识符;
-
关键字是有特殊含义的,不能用作标示符
-
保留字虽然还没有特定用途,但它们很有可能在将来被用作关键字,所以不能作为标示符
二、数据类型
JavaScript是弱类型脚本语言,声明变量时无需指定变量的数据类型,即是变量的数据类型是解释时动态决定的,但JavaScript的值保存在内存中时,也是有数据类型的。
基本数据类型:
Number数值类型: 包含整数和浮点数;
Boolean布尔类型: 只有true或false两个值;
String字符串类型: 字符串变量必须用引号括住(单引号或双引号);
Undefined类型: 专门用来确定一个已经创建但没有初始值的变量;
Null类型: 用于表明某个变量的值为空;
【注: 复杂数据类型Object;ECMAScript不支持任何创建自定义类型的机制,所有的值都以上6中数据类型之一】
- typeof操作符
typeof操作符是用来检测变量的数据类型,对于值或变量使用typeof会返回字符串
var num = 10;
alert( typeof num ); // number
-
Undefined类型
- Undefined类型只有一个值,即是特殊的undefined,在使用var声明变量,但没有对其初始化时,变量的值就是为undefined,这个值主要的目的是为了比较的
var a; alert(a); // undefined
- 对于未初始化的变量与根本不存在的变量(未声明的变量是不一样的)
var num; alert(num); // undefined alert(age); // ReferenceError: age is not defined
注: typeof num和typeof age都返回的是undefined。但在逻辑上,它们的值,一个是undefined,一个是报错;但它们的类型都是undefined,所以定义变量时,尽可能的不要只声明不赋值!
-
Null类型
- Null类型只有一个值,即特殊值null,它表示变量的值为空或空对象引用,而typeof操作符检测null会返回object
var box = null; alert(typeof box); // object
- undefined是派生自null的,因此它们的相等性测量返回的是true
if( null == undefined ) // true
注意: undefined与null之间的差别比较微妙,undefined表示没有初始值,而null表示变量有值的,只是其值为null!!
- Boolean类型
- Boolean类型只有两个值: true和false,但true不一定等于1,false不一定等于0;另外JS区分大小写的,True和False或其他都不是Boolean类型的值
var box = true; alert(typeof box); // boolean
- 虽然Boolean类型的字面量只有true和false两种,但所有类型的值都有与这个两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以使用转型函数Boolean()
var hello = 'hello world!'; // 强制性转换 var helloB = Boolean(hello); alert(helloB); // true // 隐式转换 if(hello){ alert('条件为true在这里'); // 执行这条语句 } else { alert('条件为false在这里'); }
-
Number类型
Numer类型包括两种数值: 整形和浮点型。- 最基本的数值字面量是十进制整数
var num1 = 100; // 十进制整数
- 八进制字面量(以8为基数),前导必须是0,八进制序列(0~7)
var num2 = 070; // 八进制 var num3 = 079; // 无效八进制,自动解析为79 var num4 = 08; // 无效八进制,自动解析为8
【注意: 八进制数并不是所有的浏览器都支持的】
- 十六进制字面量,前面必须是0x,后面是(09和af)
var box = 0xA; // 十六进制,10 var box = 0x1f; // 十六进制,31
- 浮点型,就是该数值中必须包含一个小数点
var box = 3.8; var box = 0.8;
- NaN,即非数值(Not a Number)是一个特殊的值,这个数值用于表示一个本来要返回数值的操作,未返回数值的情况(这就不会导致代码错误而终止程序,因此不会影响程序执行);0除以0,或者以Infinity(正无穷大)执行算术运算都会产生NaN的结果
var box = 0 / 0; // NaN var box = 12 / 0; // Infinity var box = 12 / 0 * 0; // NaN
注意: NaN不与任何值相等!!
- isNaN()函数,用来判断这个值到底是不是NaN【注: 将内容转换为数值】
alert(isNaN(NaN)); // true alert(isNaN(25)); // false, 25是一个数值 alert(isNaN('25')); // false,‘25’是一个字符串数值,可以转为数值 alert(isNaN('Lee')); // true,‘Lee’不能转为数值 alert(isNaN(true)); // false,true可以转为数值1
- Number()函数,将非数值转为数值,可以用于任何类型(不能转为数值,即是NaN)
alert(Number(true)); // 1,Boolean类型true和false分别对应1和0 alert(Number(25)); // 25,数值类型直接返回 alert(Number(null)); // 0,空对象返回0 alert(Number(undefined)); // NaN,undefined返回NaN // 其实就是将双引号去除,判断是否为数值 // 字符串1,只包含数值的字符串,会直接转成成十进制数值,如果包含前导0,即自动去掉 alert(Number('456')); // 456 alert(Number('070')); // 70 alert(Number('0x1f')); // 十六进制转为十进制即31 // 字符串2,只包含浮点数值的字符串,会直接转成浮点数值,如果包含前导和后导 0,即自动去掉 alert(Number('08.90')); //8.9 // 字符串3,如果字符串是空,那么直接转成0 alert(Number('')); // 0 // 字符串4,如果不是以上三种字符串类型,则返回NaN alert(Number('Lee123')); //NaN alert(Number('123aa')); //NaN
- parseInt()取整函数,对于Number()函数在转换字符串时比较复杂也不够合理,所以更多会使用到parseInt(),从第一位解析到非整数位置
alert(parseInt('456Lee')); // 456,会返回整数部分 alert(parseInt('Lee456Lee')); // NaN,如果第一个不是数值,就返回 NaN alert(parseInt('12Lee56Lee')); // 12,从第一数值开始取,到最后一个连续数值结束 alert(parseInt('56.12')); // 56,小数点不是数值,会被去掉 alert(parseInt('')); // NaN,空返回 NaN
- parseFloat()函数,用于浮点数值转换的,和parseInt()一样,从第一位解析到非浮点数位置
alert(parseFloat('123Lee')); // 123,去掉不是别的部分 alert(parseFloat('123.4.5')); // 123.4,只认一个小数点 alert(parseFloat('0123.400')); // 123.4,去掉前后导
-
String类型
String可以用双引号或单引号表示。- toString()函数,可以把值转为字符串
var box1 = 11; alert(typeof box1.toString()); // string var box2 = true; alert(typeof box2.toString()); // string
- toString()一般是不需要传参,但在数值转为字符串时,可以传递进制参数
var box = 10; alert(box.toString()); // 10,默认十进制输出 alert(box.toString(2)); // 1010,二进制输出 alert(box.toString(8)); // 12,八进制输出 alert(box.toString(10)); // 10,十进制输出 alert(box.toString(16)); // a,十六进制输出
Object类型
var test = null;
alert( typeof test );
三、运算符
- 赋值运算符'='
// 将变量str赋值为HelloWorld
var str = 'HelloWorld';
-
一元运算符
只能操作一个值的运算符即是一元运算符;- 递增'++'和递减'- -'
var box = 100; ++box; // 把box累加一个1,相当于 box = box + 1 --box; // 把box累减一个1,相当于 box = box - 1 box++; // 同上 box--; // 同上
- 前置和后置的区别
没有赋值操作,前置和后置是一样的;
有赋值操作符时,前置运算符会先加加(减减)操作再赋值;后置运算符先赋值再加加(减减)操作;var box = 100; var age = ++box; // age值为101,前置即是先执行加加操作,再赋值 var height = box++; // height值为100,后置即是先赋值,再执行加加操作 var a = 10; var b = a++ + 6; alert(b); // 16 var e = 10; var f = ++e + 6; alert(f); // 17
-
算术运算符(二元运算符)
- 加法运算符 '+'
- 减法运算符 '-'
- 乘法运算符 '*'
- 除法运算符 '/'
- 取余(求模) '%'
-
关系运算符(二元运算符)
小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、等于(==)、不等于(!=)、全等(恒等)(===)- 等于(==): 如果前后两个变量的值相等,则返回true
// 判断5是否等于'5' alert( 5 == '5' ); // true,JS支持自动类型转换,所以需要时,会将字符串'5'转为数值类型
- 全等(===): 必须前后两个变量的值相等,数据类型也相同,才会返回true
// 判断5是否全等于'5' alert( 5 === '5'); // false,因为两个数据类型不匹配
- 等于(==): 如果前后两个变量的值相等,则返回true
-
逻辑运算符
- 逻辑与 &&(并且): 必须所有条件都为true,才返回true,否则返回false
alert( 5>4 && 10>8 ); // true,条件5>4成立,条件10>8成立,返回true
- 逻辑或 ||(或者): 只要有一个条件为true,就可以返回true,否则返回false
alert( 5>4 || 10<8 ); // true,条件5>4成立,虽然10<8不成立,但还是返回true
- 逻辑非 !: 只操作一个操作数,如果操作数是true,则返回false;如果操作数是true,则返回false
alert( !false ); // true
三目运算符
三目运算符其实就是if...else...的简写操作
// 先执行判断操作,如果true执行第二部分代码,false执行第三部分代码
3 > 1 ? alert('3是大于1的') : alert('3是小于1的');