JavaScript的基础入门

1、JS是一门什么语言?

  •      是一门解释性的语言
  •      是一门脚本语言
  •      是一门弱类型语言,声明变量都用var
  •      是一门基于对象的语言
  •      是一门动态类型的语言:
  1.      1. 代码(变量)只有执行到这个位置的时候,才知道这个变量中到底存储的是什么,如果是对象,就有对象的属性和方法,如果是变量就是变量的作用
  2.      2. 对象没有什么,只要点了,通过点语法,那么就可以为对象添加属性或者方法

2、函数(方法):

  函数定义:function  函数名(){

      代码

    }

  函数调用:函数名();

  注意:JS的函数没有Java的重载,一旦函数名重复,后面的会覆盖前面

  函数参数:与Java不同的是JS的参数无需定义参数类型,只需要形参名

  函数的返回值:

  1. 函数有没有返回值取决于函数体内有没有return;
  2. 如果函数有return,但是return后面没有任何内容,结果就是undefined

3、变量

  如何获取某个变量的类型?   typeof 变量

  函数是有数据类型,数据类型:是function 类型的

4、作用域

  全局变量:

  • 声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用
  • 除了函数以外,其他的任何位置定义的变量都是全局变量
  • 全局变量,如果页面不关闭,那么就不会释放,就会占空间,消耗内存

  局部变量:

  • 在函数内部定义的变量,是局部变量,外面不能使用

    * 全局作用域:全局变量的使用范围
    * 局部作用域:局部变量的使用范围

    * 块级作用域:一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中在这个块级作用域中定义的变量,外面也能使用;
    * 说明:js没有块级作用域,只有函数除外

     隐式全局变量:

  声明的变量没有var,就叫隐式全局变量

  • 全局变量是不能被删除的,隐式全局变量是可以被删除的
  • 定义变量使用var是不会被删除的,没有var是可以删除的

5、预解析:提前解析代码

    * 预解析做什么事?

  1. 把变量的声明提前了(注意是声明,还没有赋值)----提前到当前所在的作用域的最上面
  2. 函数的声明也会被提前---提前到当前所在的作用域的最上面
 1 // 函数调用的时候,把会函数的声明提升到作用域的上面
 2    f1();//调用
 3    var num=20;//这个变量的声明会提升到变量使用之前
 4    function f1() {
 5      console.log(num);//undefined
 6      //var num=10;
 7    }
 8    
 9 // 上面这段代码其实就是这样:
10    var num;
11    function f1() {
12      console.log(num);//undefined
13      //var num=10;
14    }
15    num = 20;
16 // 所以是undefined
  • 预解析中,变量的提升,只会在当前的作用域中提升,提前到当前的作用域的最上面
  • 函数中的变量只会提前到函数的作用域中的最前面,不会出去
  • 预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)

6、JS—基于对象的语言

  js不是面向对象的语言,但是可以模拟面向对象的思想。js是一门基于对象的语言。这里的对象也可以理解为Java的对象。

  js创建对象的方式1:

 1     //实例化对象
 2     var obj = new Object();
 3     //对象有特征---属性和行为---方法
 4     //添加属性-----如何添加属性?  对象.名字=值;
 5     obj.name = "小苏";
 6     obj.age = 38;
 7     obj.sex = "女";
 8     //添加方法----如何添加方法? 对象.名字=函数;
 9     obj.eat = function () {
10       console.log("我喜欢吃油炸榴莲凉拌臭豆腐和大蒜");
11     };
12     obj.play = function () {
13       console.log("我喜欢玩飞机模型");
14     };
15     obj.cook = function () {
16       console.log("切菜");
17     };
18     console.log(obj.name);//获取--输出
19     obj.eat();//方法的

  js创建对象的方式2(工厂模式):

 1     //工厂模式创建对象
 2     function createObject(name,age) {
 3       var obj = new Object();//创建对象
 4       //添加属性
 5       obj.name = name;
 6       obj.age = age;
 7       //添加方法
 8       obj.sayHi = function () {
 9         console.log("阿涅哈斯诶呦,我叫:" + this.name + "我今年:" + this.age);
10       };
11       return obj;
12     }
13     //创建人的对象
14     var per1 = createObject("小芳",20);
15     per1.sayHi();
16     //创建一个人的对象
17     var per2 = createObject("小红",30);
18     per2.sayHi();

  js创建对象的方式3(自定义构造函数):

 1     //自定义构造函数创建对象,我要自己定义一个构造函数,自定义构造函数,创建对象
 2     //函数和构造函数的区别;名字是不是大写(首字母是大写)
 3     function Person(name,age) {
 4       this.name=name;
 5       this.age=age;
 6       this.sayHi=function () {
 7         console.log("我叫:"+this.name+",年龄是:"+this.age);
 8       };
 9     }
10 
11     //自定义构造函数创建对象:先自定义一个构造函数,创建对象
12     var obj=new Person("小明",10);
13     console.log(obj.name);
14     console.log(obj.age);
15     obj.sayHi();
16 
17     var obj2=new Person("小红",20);
18     console.log(obj2.name);
19     console.log(obj2.age);
20     obj2.sayHi();

  js创建对象的方式4(字面量方式):缺点是一次性的对象

 1     var obj={};
 2     obj.name="小白";
 3     obj.age=10;
 4     obj.sayHi=function () {
 5       console.log("我是:"+this.name); //我是:小白
 6     };
 7     obj.sayHi();
 8     
 9     //优化的第二种写法
10     var obj2={
11       name:"小明",
12       age:20,
13       sayHi:function () {
14         console.log("我是:"+this.name); //我是:小明
15       },
16       eat:function () {
17         console.log("吃了");
18       }
19     };
20     obj2.sayHi();
21     obj2.eat();

 7、JS的数据类型

    原始数据类型:number,string,boolean,undefined, null,object
    基本类型(简单类型),值类型:number,string,boolean
    复杂类型(引用类型):object
    空类型:undefined,null

    值类型的值在哪一块空间中存储?  栈中存储
    引用类型的值在哪一块空间中存储?  对象在堆上存储,地址在栈上存储

    var num=10;  //值类型,值在栈上
    var obj={};  //复杂类型,对象在堆,地址(引用)在栈

    值类型之间传递,传递的是值
    引用类型之间传递,传递的是地址(引用)

    值类型作为函数的参数,传递的是值
    引用类型作为函数的参数,传递的是地址

 8、JS的三种对象

  1.     内置对象----js系统自带的对象
  2.     自定义对象---自己定义的构造函数创建的对象
  3.     浏览器对象---BOM的时候讲

  instanceof :验证变量是不是对象

原文地址:https://www.cnblogs.com/elian91/p/15394321.html