- JavaScript包括:
ECMAScript:JavaScript标准
DOM:文档对象模型
BOM:浏览器对象模型
- 特点:
解释型语言,无需编译,直接运行。
类似于C和Java的语法结构。
动态语言。
基于原型的面向对象。
- 初识js
js代码需要编写到script标签中。<script type = "text/javascript" />
demo:
alert("你好!") //弹出框
document.write("我的第一个js代码"); //向body中写内容
console.log("打印控制台"); //打印控制台
- 标识符
1、可以含有字母、数字 、下划线、$
2、标识符不能以数字开头
3、标识符不能是JS中的关键字或保留字
4、标识符一般采用驼峰命名法,首字母小写,其余每个单词开头字母大写
JS底层保存标识符采用Unicode编码:utf-8,理论上讲,所有utf-8中含有的内容都可以作为标识符。
- 数据类型
JS中一共六种数据类型:
String (字符串)、Number(数值)、Boolean(布尔值)、Null(空值)、Undefined(未定义)、Object(对象)
其中String、Number、Boolean、Null、Undefined属于基本数据类型,而Object属于引用数据类型。
1、String
字符串需要放在 引号中,不加 引号会变成变量。
使用单引号和双引号都可以。
单双引号不能嵌套。
2、Number
在JS中所有的数值都是Number类型
包括整数和浮点数(小数)
Js中可以表示的数字的最大值:Numbe.MAX.VALUE,如果超过最大值,返回Infinity(无穷),
-Infinity表示负无穷
NaN是特殊数字(非法),表示Not a Number,但使用typeOf检查NaN会返回Number
可以使用运算符 typeOf来检查一个变量的类型:
typeOf 变量
在JS中整数的运算基本可以保证精确,如果进行浮点数计算,可能得到一个不精确的结果,所以不要使用JS进行精确度较高的计算,例如计算金额
3、Null
var a = null;
console.log(typeof a) // Object a是Object类型
4、Undefined (未定义)
var a; //声明但未赋初值
console.log(typeof a) //undefined a是Undefined类型
- 强制类型转换
指将一个数据类型强制转换为其他的数据类型。
1.转换为String类型
方法一:调用被转换类型的toString()方法,该方法不会影响到原变量
var num = 520;
//将num强制转换为字符串类型
num.toString();
console.log(typeof num); //number
var res = num.toString();
console.log(typeof res); //String
num = num.toString();
console.log(typeof num); //String
注意:toString方法不适用于值为null和undefined的方法,如果误用则报错。
方法二:调用String()函数,并将被转换的数据作为参数的传递函数。null和undefined也适用
var love = 520;
var l = String(love);
console.log(typeof love); //number
console.log(typeof l); //String
love = null;
love = String(love);
console.log(typeof love); //String
console.log(love); // "null"
love = undefined;
love = String(love);
console.log(typeof love); //String
console.log(love); // "undefined"
2、转为Number类型
方法一:使用Number()函数
var love = "520";
var l = Number(love);
console.log(typeof l); //string
console.log(typeof love); //Number
console.log(love); // 520
love = "you"
love = Number(love);
console.log(typeof love); //Number
console.log(love); // NaN
love = "2you"
love = Number(love);
console.log(typeof love); //Number
console.log(love); // NaN
love = ""
love = Number(love);
console.log(typeof love); //Number
console.log(love); // 0
love = true
love = Number(love);
console.log(typeof love); //Number
console.log(love); // 1
love = true
console.log(love); // 0
love = null
love = Number(love);
console.log(typeof love); //Number
console.log(love); // 0
love = undefined
love = Number(love);
console.log(typeof love); //Number
console.log(love); // NaN
如果是纯数字的字符串,直接转换为数字;
如果是含有非数字的字符串,则转换为NaN;
如果字符串为空或者空格,则转换为 0;
布尔值转数字类型,true为1;false为0
null转数字为0;
undefined转数字为NaN;
方法二:针对字符串,从左向右取出字符串中的数字,遇到非数字停止。
parseInt()方法,转换成整数;
parseFloat(),把一个字符串转换成一个浮点数;
var num = "520px";
num = parseInt(num);
console.log(typeof num); // number
console.log(num); //520
num = "520you1314";
num = parseInt(num);
console.log(typeof num); // number
console.log(num); //520
num = "you1314";
num = parseInt(num);
console.log(typeof num); // number
console.log(num); //NaN
num = "520.1314";
num = parseInt(num);
console.log(typeof num); // number
console.log(num); //520
num = "520.1314";
num = parseInt(num);
console.log(typeof num); // number
console.log(num); //520
num = "520.1314you";
num = parseFloat(num);
console.log(typeof num); // number
console.log(num); //520.1314
num = true;
num = parseFloat(num);
console.log(typeof num); // number
console.log(num); // NaN
注意:
①如果将一个非String类型的变量使用parseaInt()或parseFloat(),它会先将其转换为String,然后再转换为Number。
②可以在parseInt()和parseFloat()中传第二个参数,指定进制;
例:parseInt(100,2) // 4
3、转换为Boolean
使用Boolean()函数。
数字类型转布尔,除了0和NaN,其余结果都是true;
字符串转布尔,除了空串,其余都是true;
null和undefined转布尔都是false;
对象也会转换为true。
var love = 520;
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //true
love = 0;
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //false
love = Infinity;
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //true
love = NaN;
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //false
love = "you";
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //true
love = "爱你";
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //false
love = " ";
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //true
love = "";
console.log(love); //false
love = null;
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //false
love = undefined;
love = Boolean(love);
console.log(typeOf love); //boolean
console.log(love); //false
- 其他进制的数字
在JS中,
表示十六进制,需要以0x开头;
表示八进制,用0开头;
二进制以0b开头。
有的浏览器不支持。
var num = 0x10;
console.log(num); // 16 转换为10进制输出
num = 010;
console.log(num); // 8
num = 0b10;
console.log(num); // 2
- 算数运算符
1、typeof 返回值是字符串
2、算术运算符
当对非number类型的值进行运算时,会将这些值转换为Number然后运算。
var res = true + 1;
cnsole.log(res); // 2
res = true + false;
cnsole.log(res); // 1
res = 1 + null;
cnsole.log(res); // 1
res = 1 + NaN;
cnsole.log(res); // NaN
res = "520" + "1314"
cnsole.log(res); // 5201314
res = 1 + 2 + "3";
console.log(res); // 33
res = "1" + 2 + 3;
console.log(res); // 123
res = 100 - true
console.log(res); // 99
res = 100 - "1"
console.log(res); // 99
注意:
①当 + 对两个字符串实现字符串拼接。任何值和字符串进行加法运算,都会先转换为字符串,再和字符串做拼接。
我们可以根据这一特点,将一个任意字符串转换为String类型。实际也是调用String(),由浏览器自动完成。
var love = 520;
love = love + "";
console.log(typeof love); //string
console.log(love); // "520"
②任何值和NaN运算都是NaN
③任何值做 - * / 运算时,都会自动转换为Number
我们可以利用这一特点,采用 -0 *1 /1将其转换为Number类型
var res = "520";
res = res - 0;
console.log(typeof res); //Number
- 一元运算符
+ (正号)、- (负号),还有强制转换为Nunmber类型的功能。
var n = 123;
n = -n;
console.log(n); // -123
n = "111";
console.log(n); // "111"
console.log(typeof n); // String
n = +n;
console.log(n); // 111
console.log(typeof n); // Number
- 自增和自减
var n = 1;
n++;
console.log(n); // 2
var b=1
++b;
console.log(b); // 2
var m = 1;
console.log(m++); // 1
console.log(++m); // 2
- 逻辑运算符
1、非 !
取反,不影响原值
如果对非布尔值进行运算,会先转换为布尔值,然后再取反。
可以对一个任意数据取两次反,实现转换为非布尔值的结果
var n = 10;
n = !!n;
console.log(n); // true
console.log(typeof n); //boolean
2、与 &&
JS中的与属于短路与。
对于非布尔值,会先将其转换为布尔值,然后再运算,但是返回原值;无论结果如何,都返回后面的。
var res = 0 && 5;
console.log(res); // 0
res = 2 && 7
console.log(res) // 7
3、或 ||
JS中的或为短路或。
对于非布尔值,会先将其转换为布尔值,然后再运算,但是返回原值;如果两个值都为false,则返回后面的;如果两个值都为true,则返回前面的。
- 赋值运算符 =、+=、-+、*=、/=、%=
var n = 10;
n += 5; //等价于 n = n + 5;
- 关系运算符
通过关系运算符比较两个值的大小关系,成立返回true,否则返回false。
对于非数值进行比较时,先转换为数值型;任何值和NaN比较,都是false。
如果比较两个字符串,不会将其转换成数值比较,而会比较字符串的字符编码(unicode编码);按位进行比较,所以大小跟位数关系不大。
- 逗号运算符
var a, b, c
- 运算符优先级
可以使用()改变优先级。
- 代码块
一个{ }中的语句我们也成为一个 代码块,实现分组。
代码块的后面就不用在编写 ;了
- prompt()
可以弹出一个提示框,可以输入文本,返回值是String类型。
- 条件分支语句 switch
(1)判断全等,使用break跳出单个分支。
(2) 如果case没有break,会一直向下执行。
(3)default相当于if中的else
- while
可以用break语句结束循环。
- for
1、for循环条件可以省略,但分号不可省略。
var i=0;
for(;i<10;){
i++
}
2、break结束就近循环。
3、可以为循环创建label,来标识当前循环:
outer:
for(var i=1;i<10;i++){ //label名为outer
for(var j=0;j<10;j++){
console.log(j)
if(j==5){
break outer; //直接终止名为label的循环
}
}
}