数组的属性和方法
数组的声明
<script>
//声明数组并分配空间
var nums = new Array(5);
//赋值
nums[0]=10;
nums[1]=20;
nums[2]=30;
//输出数组中的元素值
console.log(nums[0]);//10
console.log(nums[2]);//30
console.log(nums[4]);//underfined
console.log(nums[6]);//underfined
//声明数组和赋值合并写
var strs = ["2","323","342","132"];
console.log(strs[0]);
console.log(strs[4]);//underfined
</script>
数组的属性和方法
<script>
var nums=[11,32,432,12,546,23135,431233,32];
//获取数组的长度
console.log(nums.length)
console.log(nums);
//join():将数组里的元素取出来组装成一个字符串,元素之间使用指定的符号进行连接
var newNums = nums.join("-");
console.log(newNums);
//sort():对数组进行升序排序
var numbers=nums.sort();
console.log(numbers);
//冒泡排序
//外层for循环控制比较的轮数
for(var i=0;i<nums.length-1;i++){
for(var j=0;j<nums.length-1-i;j++){
if(nums[j]>nums[j+1]){
var temp=nums[j];
nums[j]=nums[j-1];
nums[j-1]=temp;
}
}
}
console.log(nums);
//push();想数组末尾添加元素
var length= nums.push(100,200);
console.log(length);
console.log(nums);
var str1 = ["hello","java","js"]
var str2 = ["math","css"]
var str =str1.concat(str2);
console.log(str)
</script>
Date对象
var 日期对象=new Date(参数) 参数格式:MM DD,YYYY,hh:mm:ss
<script>
var date = new Date();
console.log(date);
//通过date.getDay()获取的星期是一个阿拉伯数字,0表示周日,1表示周一
var num = date.getDay();
var week = ["日", "一", "二", "三", "四", "五", "六"]
console.log("今天是" + date.getFullYear() + "年" + (date.getMonth() + 1) + "月" + date.getDate() + "日,星期" + week[date.getDay()] + "," + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds())
</script>
String对象
<script>
var str1 = new String("q-w-e-r-e");
console.log(str1);
var str2 = 'hello java';
console.log(str2);
//获取字符串的长度
// console.log(str1.length);
// console.log(str2.length);
// console.log(str1.charAt(2));
// console.log(str1.concat(str2));
// console.log(str1.replace("w","123"));
// console.log(str1.split("-"));
// console.log(str1.indexOf("e"));
// console.log(str1.lastIndexOf("e"));
// console.log(str1.match("e"));
// console.log(str1.toLowerCase());
// console.log(str1.toUpperCase());
console.log(str1);
// console.log(str1.substr(1,2));
console.log(str1.substring(1,2))
console.log(str1.slice(1,4));
console.log(str2.repeat(5));
</script>
Math对象
<script>
//输出圆周率
console.log(Math.PI)
//上舍入:返回一个比指定数大的最小整数值
console.log(Math.ceil(9.00001))//10
//下舍入:返回一个比指定数小的最大整数值
console.log(Math.floor(9.999999999))//9
//四舍五入: <0.5舍去 ≥0.5就进1
console.log(Math.round(5.50000000001));
//random():随机返回一个≥0.0,小于1.0之间的浮点数
var num1=Math.random
console.log(num1);
//返回一个[0.0 , 10.0)之间的浮点数
console.log(Math.random()*10);
//返回一个[0.0 , 10.0)
console.log(parseInt(Math.random()*10));
//随机返回一个[39 , 51)之间的整数
console.log(parseInt(Math.random()*12)+39)
</script>
函数
定义函数
函数声明 function 函数名 () { //函数体 } 函数表达式 var 变量 = 匿名函数 ;
命名函数和匿名函数
如果函数有名字,就是命名函数
如果函数没有名字,就是匿名函数
区别
如果在页面中有两个同名的命名函数,后面的一个命名函数会覆盖前面的命名函数
如果在页面中有两个同名的命名函数,后面的一个匿名函数不会覆盖前面的匿名函数
<script>
function f1(){
console.log("我是恁叠")
}
//命名函数
f1();
function f1(){
console.log("我是你爹")
}
//命名函数调用
f1();
//如果在页面中有两个同名的命名函数,后面的一个命名函数会覆盖前面的命名函数
var f2=function(){
console.log('马力');
}
//匿名函数
f2();
var f2=function(){
console.log('立马');
}
//匿名函数调用
f2();
//如果在页面中有两个同名的命名函数,后面的一个匿名函数不会覆盖前面的匿名函数
</script>
函数自调用
(function f2(){
console.log("声明函数同时调用函数")
})();
<script>
//先声明函数
function f1(){
console.log("我是恁叠");
}
f1();
//声明函数的同时进行调用
(function f2(){
console.log("声明函数同时调用函数")
})();
</script>
函数的数据类型
结论:函数是有数据类型,它的数据类型是:function
<script>
function f1(){
console.log('qwert');
}
console.log(typeof f1());//function
var f2 = function(){
console.log('asdfg');
}
console.log(typeof f2());//function
</script>
函数作为函数的参数
回调函数
在一个函数中去调用另外一个函数,调用的这个函数是由参数传递过来的
function f1(x , y){
console.log(x+y);
}
function f1(fn){
fn();
}
function f2(){
console.log("我是回调函数")
}
f1(f2);
函数里的return
任何数据类型都可以作为返回值
<script>
function max(num1,num2){
if(num1>num2){
return num1;
}else{
return num2;
}
}
var max=max(100,200);
console.log(max);
</script>
函数的返回值是一个函数
<script>
function f1(){
console.log("f1函数调用了");
return function(){
console.log("我是f1函数里的return返回的结果")
}
}
//ff是一个匿名函数
var ff=f1();
ff();
</script>
js变量的作用域
js没有作用域的概念,但是函数中定义的变量只能在函数中使用
没有使用var声明的变量自动升级为全局变量,在函数外也可以使用
隐式全局变量和全局变量
隐式全局变量
指声明变量时没有使用声明变量的关键字
隐式全局变量是可以被删除的,但是全局变量不会
作用域链
沿着作用域链一级一级地搜索的过程。搜索过程始终从作用域链底端开始,然后逐级向上回溯,直到找到为止(如果找不到,通常会报错)
<script>
var num = 10;
function f1() {
var num = 20;
function f2() {
var num = 30;
function f3() {
var num = 50;
console.log(num);
}
f3();
}
f2();
}
f1();
</script>
这样输出的是50,如果把f3中的输出代码注释掉就是输出f2中的数据30
预解析
1、变量的声明提前了----提前到当前所在的作用域的最上面
2、函数的声明也会被提前---提前到当前所在的作用域的最上面