Js基础语法2

Js基础语法2

1. 案例:找出数组中大于5的元素
方法一:<script>
        var arr=[1,2,5,7,8,10];
        var newarr=[];
        var j=0;
        for (var i=0;i<arr.length;i++){
            if(arr[i]>=5){
                newarr[j]=arr[i];
                j++;
            }
        }
        console.log(newarr);
    </script>
方法二:
<script>
        var arr=[1,2,5,7,8,10];
        var newarr=[];
        for (var i=0;i<arr.length;i++){
            if(arr[i]>=5){
                newarr[newarr.length]=arr[i];
            }
        }
        console.log(newarr);
    </script>
2. arguments
function fn() {
            console.log(arguments);//里面存储了所有传递过来的实参,其是一个伪数组,具有数组的length属性,是按照索引的方式进行存储的,但是没有pop,push方法
            for (var i=0;i<arguments.length;i++){
                console.log(arguments[i]);
            }
        }
fn(1,2,3);
fn(1,2,3,4,5);
3. js作用域:代码的名字(变量)在某个范围内起作用和效果,提高代码的可靠性,,减少命名冲突
全局作用域:整个script标签,或者是单独的js文件下都可以使用
局部作用域:在函数内部就是局部作用域,只在函数内部起作用
 <script>
        var num = 10;//全局变量

        function f() {
            var num = 10;//局部变量
            console.log(num);
        }
        f();
        console.log(num);
    </script>
4. 作用域链:就近原则,有代码就有作用域,函数本身就是一个作用域,其内部再套用其他的函数就为作用域链
<script>
        function f() {
            var num = 10;
            function f1() {
                console.log(num);//内部函数可以访问外部函数里面的量,就近原则
            }
        }
        f();
</script>
案例:
function f1(){
    var num=123;
    function f2(){
        console.log(num);//结果是123
    }
    f2();
}
var num=456;
f1();

2.预解析

代码执行:第一步预解析,第二步代码执行
预解析:会把js里面的var还有function提升到当前作用域的最前面
1.函数预解析(变量提升):把变量声明提升到当前作用域的最前面
fun();
var fun()=function(){
    console.log(num);//报错
}
与
var fun;
fun();
fun()=function(){
    console.log(num);
}
一样
2.变量预解析(函数提升):
console.log(num);//undefined
var num=10;
与
var num;
console.log(num);
num=10;
意思一样,先预解析声明变量
代码执行:按照代码书写的顺序从上往下执行

案例1:
var num=10;
	fun();
	function fun(){
    console.log(num);//结果是undefined
    var num=20;
}
相当于
var num;
function fun(){
	var num;
    console.log(num);
    num=20;
}
num=10;
fun();
案例2:
	f1();
	console.log(c);
	console.log(b);
	console.log(a);
function f1(){
	var a=b=c=9;//var a=9;b=9;c=9;
    console.log(c);
	console.log(c);
	console.log(c);
}
相当于
function f1(){
    var a;
    a=9;b=9;c=9;
    console.log(a);//9
	console.log(b);//9
	console.log(c);//9
}
f1();
	console.log(c);//9
	console.log(b);//9
	console.log(a);//报错

3.对象

对象:一个具体的事务,由属性(特征)和方法(行为)组成
对象表达结构清晰
1.对象的创建,字面量创建
//var obj={};空对象
var obj={
    uname:'李一雄',
    age=18,
    sex='男',
    sayHi:function() {
        console.log('hi');
    }
}
调用:obj.uname
obj.saiHi();
obj['uname'];
-------------------------
变量单独声明并赋值,使用的时候直接写变量名 单独存在
属性在对象里不需要声明 ,使用的必须是对象名.属性名
2.利用new object创建对象
var obj=new Object();//创建了一个空对象
obj.name='a';
obj.sex='男';
obj.age=18;
obj.sayHi=function(){
    console.log('hi');
}
-------------
3.利用构造函数创建对象
构造函数首字母需要大写

function Star(name,age,sex){
	this.name=name;
this.age=age;
this.sex=sex;
}
var ldh=new Star('刘德华',18,'男');
---------------------------
new 关键字执行过程
1.new 构造函数可以在内存中 创建一个空对象
2.this 指向new 的对象
3.执行构造函数里面的代码给空对象添加属性和方法,进行赋值操作
4.返回这个对象

------------------------
遍历对象
 function Star(name,age,sex){
            this.name=name;
            this.age=age;
            this.sex=sex;
       }
var a=new Star('a','b','c');
        for(var is in a ){
            console.log(is);//属性名
            console.log(a[is]);//对象值
}

4.数组

创建数组
1.字面量创建
var arr=[1,2,3]
2.new Array()创建
var arr=new Array(5);//创建了一个长度为5的数组
var arr=new Array(2,3,4)//相当于字面量创建数组

猜你喜欢

转载自blog.csdn.net/Dhxy1030/article/details/114098667