zoukankan      html  css  js  c++  java
  • 进来看,让你躺着就把JavaScript学完了(五)

    JavaScript基础语法5

    如果你想成为一名优秀的java架构师,看这里 → 乐字节免费公开课(腾讯课堂)

    如需要跟多资料请点击右侧(记住入群暗号:66) → 这是一条不归路,有秃头风险,请慎重选择!

    函数

    ​ 函数,即方法。就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值。函数也是对象。

    函数的定义

    ​ 有三种函数定义的方式:函数声明语句、函数定义表达式、Function构造函数

    函数声明语句
    function 函数名([参数列表]){
        
    }
    例如:
    function foo(){ 
        console.log(1);
    } 
    foo(); 
    

    ​ 该种方式定义的函数具有声明提升的效果

    foo();   
    function foo(){ 
            console.log(1);
    } 
    // 变量声明提升
    console.log( a );  
    var a = 2;
    
    函数定义表达式

    ​ 以表达式方式定义的函数,函数的名称是可以不需要的

    var 变量名 = function ([参数列表]) {
        
    }
    变量名();
    例如:
    var fun = function(){
        console.log("Hello");
    }
    fun();
    

    ​ 这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式,因为赋值语句的等号右侧只能放表达式。

    Function构造函数

    ​ Function构造函数接收任意数量的参数,但最后一个参数始终都被看成是函数体,而前面的参数则列举出了新函数的参数。

    var add = new Function('x','y','return (x + y)');
    // 等同于
    function add(x, y) {
        return (x + y);
    }
    add();
    

    注意:

    1. js中的函数没有重载,同名的函数,会被后面的函数覆盖。
    2. js中允许有不定数目的参数,后面介绍arguments对象

    函数的参数、调用和return语句

    参数

    ​ 函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数,定义时的参数称为形参,调用时的参数称为实参

    • 实参可以省略,那么对应形参为undefined
    • 若函数形参同名(一般不会这么干):在使用时以最后一个值为准。
    • 可以给参数默认值:当参数为特殊值时,可以赋予默认值。
    • 参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象。
    // 调用函数时,实参可以省略,则对应形参为undefined
    function add(a , b) {
    	console.log(a + "+" + b + "=" + (a + b));
    }
    add(3,4,5)//3+4=7
    add(1);//1+undefined=NaN
    add();//undefined+undefined=NaN
    
    // 若函数形参同名(一般不会这么干):在使用时以最后一个值为准
    function add2(a , a) {
    	console.log(a);
    }
    add2(1,2);
    
    // 给参数默认值
    function defaultValue(a){
    	a = a || "a";
    	return a;
    }
    console.log(defaultValue());
    function f(a){
    	//若参数a不为undefined或null,则取本身的值,否则给一个默认值
    	(a !== undefined && a !== null) ? a = a : a = 1;
     	return a;
    }
    console.log(f());
    
    // 值传递
    var num = 12;
    function change(n) {
    	n = 30;
    }
    change(num);
    console.log(num);
    // 引用传递
    var obj = {name: "tom"};
    function paramter(o) {
    	o.name = 2;
    }
    paramter(obj);
    console.log(obj.name);
    // 给形参o赋予了新的数组
    var obj2 = [1, 2, 3];
    function paramter2(o){
    	o = [2, 3, 4];
    	o[1] = 3;
    }
    paramter2 (obj2);
    console.log(obj2)
    
    函数的调用

    1. 常用调用方式

    函数名([实参]);
    

    ​ 存在返回值可以变量接收,若接收无返回值函数则为undefined。

    2. 函数调用模式

    function add(a,b){
       return a+b;
    } 
    var sum = add(1,2) 
    console.log(sum); 
    

    3. 方法调用模式

    var o = {
        m: function(){
             console.log(1); 
        } 
    };
    o.m();  
    
    return

    ​ 函数的执行可能会有返回值,需要使用return语句将结果返回。return 语句不是必需的,如果没有的话,该函数就不返回任何值,或者说返回 undefined。

    ​ 作用:

    ​ 1. 在没有返回值的方法中,用来结束方法。

    ​ 2. 有返回值的方法中,一个是用来结束方法,一个是将值带给调用者。

    函数的作用域

    ​ 函数作用域:全局 (global variable) 和 局部 (local variable)

    1. 全局变量与局部变量同名问题

    var box =1; // 全局变量
    function display(box){
    	var box = 3; // 此处box与全局变量box没有关系,这里的box为传递的参数,相当于新声明的局部变量
    	var b = 2; // 局部变量
    	console.log("box-->" + box);
    }
    display();
    // b 不能访问
    console.log("b-->" + b);
    

    2. 在函数中定义变量时,若没有加var关键字,使用之后自动变为全局变量

    function fun(){
    	a = 100;
    }
    fun();
    alert(a);
    

    内置对象

    Arguments   只在函数内部定义,保存了函数的实参 
    Array             数组对象 
    Date              日期对象,用来创建和获取日期 
    Math             数学对象 
    String             字符串对象,提供对字符串的一系列操作
    

    String

    ◦ charAt(idx)	   返回指定位置处的字符
    ◦ indexOf(Chr)	   返回指定子字符串的位置,从左到右。找不到返回-1
    ◦ substr(m,n)	   返回给定字符串中从m位置开始,取n个字符,如果参数n省略,则意味着取到字符串末尾。
    ◦ substring(m,n)   返回给定字符串中从m位置开始,到n位置结束,如果参数n省略,则意味着取到字符串末尾。
    ◦ toLowerCase()	   将字符串中的字符全部转化成小写。
    ◦ toUpperCase()	   将字符串中的字符全部转化成大写。
    ◦ length 		   属性,不是方法,返回字符串的长度。
    

    Math

    ◦ Math.random()	   随机数
    ◦ Math.ceil() 	   向上取整,大于最大整数
    ◦ Math.floor() 	   向小取整,小于最小整数String 
    

    Date

    // 获取日期
    ◦ getFullYear()	   年
    ◦ getMonth()	   月
    ◦ getDate()		   日
    ◦ getHours()	   时
    ◦ getMinutes()	   分
    ◦ getSeconds()	   秒
    // 设置日期
    ◦ setYear()
    ◦ setMonth()
    ◦ setDate()
    ◦ setHours()
    ◦ setMinutes()
    ◦ setSeconds()
    ◦ toLoacaleString()	转换成本地时间字符串
    

    说明:

    1. getMonth():得到的值:011(1月12月)
    2. setMonth():设置值时0~11
    3. toLocaleString():可根据本地时间把 Date 对象转换为字符串,并返回结果。

    对象

    ​ 对象(object)是 JavaScript 的核心概念,也是最重要的数据类型。JavaScript 的所有数据都可以被视为对象。JavaScript 提供多个内建对象,比如 String、Date、Array 等等。对象是带有属性和方法的特殊数据类型。

    ​ 简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成。通过JavaScript我们可以创建自己的对象。 JavaScript对象满足的这种”键值对”的格式我们称为JSON格式,以后会见得非常多,即伟大的JSON对象。
    在这里插入图片描述
    {键:值, 键2:值2,...}

    对象的创建

    ​ JS 创建自定义对象,主要通过三种方式:字面量形式创建对象、通过new Object对象创建 、通过Object对象的create方法创建对象。

    字面量形式创建
    var 对象名 = {};//创建一个空的对象
    var 对象名 = {键:值,键2:值2,...} 
    
    var obj = {
               'name' : 'hello',
               age : 12,
               sayHello : function () {
               		console.log("我是对象中的方法");
               },
        	   courses : {
               		javase : 4,
                    javascript : 3
        	   },
           	   isLike : true,
               members : [
                    {name : "小红",age : 20},
                    {name : "小绿",age : 22},
                    {name : "小蓝",age : 27},
                    {name : "小黄"}
               ]
    };
    
    通过new Object创建
    var 对象名 = new Object(); // 创建一个空的对象
    
    var obj = new Object();
    obj.name = 'zs';
    obj.age = 18;
    console.log(obj); 
    
    通过Object对象的create方法创建
    var 对象名 = Object.create(null); 
    var obj = Object.create(null);
    obj.name = 'ls';
    obj.gender = true
    console.log(obj);
    		
    var objn = Object.create(obj);
    objn.age = 18;
    console.log(objn);
    console.log(objn.gender)
    

    对象的序列化和反序列化

    ​ 序列化即将JS对象序列化为字符串,反序列化即将字符串反序列化为JS对象。JS中通过调用JSON方法,可以将对象序列化成字符串,也可以将字符串反序列化成对象 。

    // 序列化对象,将对象转为字符串
    JSON.stringify(object);
    
    // 反序列化,将一个Json字符串转换为对象。
    JSON.parse(jsonStr);
    

    this

    ​ this是JavaScript语言的一个关键字。

    ​ 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。

    ​ 随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

    在函数中使用this

    ​ 在函数中使用this属于全局性调用,代表全局对象,通过window对象来访问。

    function test () {
    	this.x = 1;
    	console.log(this.x);
    }
    test();
    console.log(x); // 相当于定义在全局对象上的属性 
    
    var x = 10;
    console.log(x)  // 10
    function test (){
        console.log(this.x)  // 10
        this.x = 1;
        console.log(this.x) // 1
        console.log(this)
    }
    
    test();
    console.log(x); // 1
    console.log(this);
    
    在对象中使用this

    ​ 在对象中的函数使用this,代表当前的上级对象。

    var obj = {
    	name : '张三',
    	age : 20,
    	sayHello : function () {
    		console.log(this.name)
    		console.log(this)
    	}
    }
    obj.sayHello(); 
    

    function test (){
    console.log(this.x) // 10
    this.x = 1;
    console.log(this.x) // 1
    console.log(this)
    }

    test();
    console.log(x); // 1
    console.log(this);

    
    ##### 在对象中使用this
    
    ​	在对象中的函数使用this,代表当前的上级对象。
    
    ```js
    var obj = {
    	name : '张三',
    	age : 20,
    	sayHello : function () {
    		console.log(this.name)
    		console.log(this)
    	}
    }
    obj.sayHello(); 
    
  • 相关阅读:
    973. K Closest Points to Origin
    919. Complete Binary Tree Inserter
    993. Cousins in Binary Tree
    20. Valid Parentheses
    141. Linked List Cycle
    912. Sort an Array
    各种排序方法总结
    509. Fibonacci Number
    374. Guess Number Higher or Lower
    238. Product of Array Except Self java solutions
  • 原文地址:https://www.cnblogs.com/lezijie/p/13187420.html
Copyright © 2011-2022 走看看