ECMAScript、浏览器对象模型(BOM)、文档对象模型(DOM)
<script>
标签添加—-><body></body>
后面
<script>
//js代码
<script>
<script type="text/javascript" src="要引入文件的相对路径" ></script>
<input type="button" name="btn" value="请点击" onclick="alert('hello world!!!')"/>
变量名,函数名,属性以及函数中的参数都属于标识符
//注释内容
/*注释内容*/
alert("");
警示框
confirm("");
确认框,包含确认,取消按钮
可以让用户输入的提示框
声明
赋值
常量
语法:const PI=3.14;
表示:变量声明了,但是没有初始化
var x;//声明但是没有初始化
console.log(x);//undefined
console.log(y);//没有定义 y is not defined
注意:变量未初始化和变量没有定义是不同的概念
表示空的值
跟undefined的区别是:undefined变量定义了 但是跟本就没有赋值
如:var x; 此时x的值就是undefined
null,变量定义了,有值,并且是值就是null
如:var z=null; 一般用于对象的初始值
语法:定义 时可以用“” 或者’ ‘,但是前后必须匹配
var str1="bbb";
var str2=' aaa';
注意:
字符串的值不能更改
toString()方法,可以将 数值,对象,布尔,字符串 转换成字符串
可以使用 String()来进行判断一个变量的值是否为null或undefined
String()函数
可以存储任何数字,整型和浮点型
var n1=100;
var n2=90.99;
注意:浮点数值的最高精度是17位小数,但在进行算数计算时其精确度远远不如整型。
值: true false
转型函数Boolean()
规则:
任何对象转换为true,null转换为false;
注意:当遇到流程控制语句(如if语句)也会对数据自动执行相应的Boolean转换
来判断一个值或变量究竟属于哪种数据类型。
typeof操作符返回的数据类型有以下几种:
表达式:JavaScript中短语,包括变量,字面量和运算符,简单表达式可以使用运算符组合成复杂表达式
只有一个操作数
如:a++ a-- ++b --b
注意:在javascript可以对任何值使用, 包括字符串,布尔值,浮点值和对象
var a = '89'; a++; //90,数值字符串自动转换成数值
var b = 'ab'; b++; //NaN,字符串包含非数值转成NaN
var c = false; c++; //1,false转成数值是0,累加就是1
var d = 2.3; d++; //3.3,直接加1
执行顺序
加法
减法
var result1 = 5 - true; //4,因为true被转换成了1
var result2 = NaN - 1; //NaN
var result3 = 5 - 3; //2
var result4 = 5 - ""; //5,因为""被转换成了0
var result5 = 5 - "2"; //3,因为"2"被转换成了2
var result6 = 5 - null; //5,因为null被转换成了0
乘法
var result1 = 100 * 70; //7000
var result2 = 100 * NaN; //NaN,只要有一个操作数为NaN即为NaN
var result3 = 100 * true; //100,因为true被转换成了1
var result4 = 100 * ""; //0,因为""被转换成了0
var result5 = 100 * "70"; //7000,因为"70"被转换成了70
var result6 = 100 * null; //0,因为null被转换成了0
var result7 = 100 * "hello"; //NaN,因为"hello"被转换成了NaN
除法
var result1 = 100 / 50; // 2
var result2 = 100 / NaN; //NaN,只要有一个操作数为NaN即为NaN
var result3 = 100 / true; //100,因为true被转换成了1
var result4 = 100 / ""; //Infinity,因为""被转换成了0
var result5 = 100 / "50"; //2,因为"50"被转换成了50
var result6 = 100 / null; //Infinity,因为null被转换成了0
var result7 = 100 / "hello"; //NaN,因为"hello"被转换成了NaN
取模(求余)
相等(==)、不相等(!=)、全等(===)和不全等(!==)
两边不全是boolean类型
console.log(Boolean("1234"));//true 非空字符串
console.log(Boolean(""));//false 空字符串
console.log(Boolean(0));// false 0
console.log(Boolean(8888));//true 非0
console.log(Boolean(null));// false 对象是null
console.log(Boolean(new Date()));// true 对象不是空
console.log(Boolean(NaN));//false
console.log(Boolean(undefined));//false
右边赋值给左边+= -= *= /= %=
定义:
function 函数名(形参1,形参2,形参3,...){
}
调用:
函数名(实参1,实参2,实参3,...);//通过函数名调用
定义:
函数定义表达式:(定义的函数是匿名函数,赋值给了一个变量)
var 变量名=function (形参1,形参2,形参3,...){
调用: }
变量名(实参1,实参2,实参3,...);//通过变量名调用
例子:求最大值
function getMax(){
var max=arguments[0];
for(let i=0;i<arguments.length;i++){
if(max < arguments[i]){
max=arguments[i];
}
}
alert("最大值是"+max);
}
getMax(10,20,40,50,60,90,200,23);
function 函数名(形参){
return 返回值;
}
var 变量=函数名(实参);//调用函数之后,返回值保存在变量里面
//可以返回任何类型的值,包括函数
在函数内部没有定义,就会在上一级作用域里面找
由内向外的作用域中寻找变量,直到找到为止
如果找到全局作用域也没找到,那么该变量的值为undefined
可以读取一个函数内部变量函数
因为变量作用域的关系,导致内部可以读取全局变量,但是外部却不能访问内部变量
function f1(){
var n=999;
function f2(){
alert(n);//99 在f2函数里面访问了f1内部的局部变量
}
return f2;//JavaScript返回值可以返回任何数据类型,包括函数
}
var rel=f1();//调用f1并接收返回值
rel();//做到了在函数外部访问内部的局部变量
不用太纠结到底怎样才算闭包,其实我们每一个写的函数都是一个简单的闭包
把函数的定义和调用合在一起
(function(){
alert("a");
}());
ES6之前 函数不能声明在块级作用域里的,函数的声明是会全部提升至顶部
ES6块级作用域里可以声明函数,但是函数声明的行为类似于let,在块级外部是不能访问的
if(){
}
现如今:
在ES6之后,允许为参数指定默认值
function f1(x,y=18){
console.log(x,y);
}
不允许有同名参数
参数默认值是不能传值,每次都重新计算表达式默认的值,惰性求值
参数默认值的位置