JavaScript基础学习

2021-01-29 01:14

阅读:712

YPE html>

标签:libs   bubble   按钮   循环   日常   服务器   复杂数据类型   xtend   重置   

前端基础学习-JavaScript

目录
  • 前端基础学习-JavaScript
    • JavaScript 简介
      • JS的简介
      • 面向对象编程介绍
      • JS 的组成
      • JS的作用与书写位置
    • 变量和流程控制
      • 变量的声明和初始化
      • 命名规则(驼峰命名)
      • 数据类型
        • 基本数据类型
        • 复杂数据类型
        • 类型判断 instanceof / typeof
        • 类型转换
        • 文本字符串操作
        • 数组操作
        • null和undefined的理解和应用
      • 运算符
        • 比较运算符
        • 逻辑运算符
        • 条件(三元)运算符
        • js中不同类型作比较的规律(布尔运算)
      • 流程控制
      • 异常捕获
        • try...catch...finally
        • Throw
    • 函数和变量
      • 函数
        • 定义方法
        • 匿名函数
        • 返回值
        • arguments
        • this关键字
      • 变量
        • 作用域
      • 事件
    • DOM
      • DOM是什么
      • DOM 可以用来做什么
        • DOM的常见操作
    • BOM
      • BOM 是什么
    • JS中的类和对象
      • 创建对象
      • 创建类
      • 在类中添加方法
      • 类的继承
    • jQuery
      • jQuery 是什么
      • 如何引入jQuery
      • jQuery的语法
      • jQuery选择器
        • jQuery元素选择器
        • jQuery 属性选择器
        • jQuery CSS 选择器
      • jQuery事件
        • 常用事件方法
        • 事件的绑定与解除
        • 事件的目标
        • 事件的冒泡
        • 自定义事件
      • AJAX
    • ES6
      • 定义变量
        • let
        • const
      • 解构赋值
      • 函数问题
        • 箭头函数(Arrow Functions)
        • 函数参数默认值
      • 模板字符串
      • set和map
        • Map 和 WeakMap
        • Set 和 WeakSet
      • Promise
      • Class
      • 迭代器
      • Symbol

JavaScript 简介

JS的简介

在上个世纪的1995年,当时的网景公司正凭借其 Navigator 浏览器成为 Web时代开启时最著名的第一代互联网公司。由于网景公司希望能在 静态HTML页面上 添加一些动态效果,于是叫 Brendan Eich 这哥们在两周之内设计出了JavaScript语言。

为什么起名叫 JavaScript?原因是当时Java语言非常红火,所以网景公司希望借Java的名气来推广,但事实上JavaScript除了语法上有点像 Java,其他部分基本上没啥关系。

在JavaScript中,是以对象为王的,在JavaScript中几乎所有的东西都是对象或者以对象的形式展现出来的。所以在学习之前,先理解一下什么叫面对对象编程。

面向对象编程介绍

面向对象是一种编程思想,其实跟Java、C++是一样的,JavaScript也是一门面向对象的编程语言。说到面向对象就不得不提出来面向过程的编程思想,可以和面向对象做一个对比。

面向过程就是分析出来解决问题所需要的步骤,然后使用方法函数将这些步骤一步一步的实现,使用的时候再一个一个的一次调用就可以了,比如C语言,性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。没有面向对象易维护、易复用、易扩展。

面向对象是把事务分解成一个个对象,然后由对象之间分工与合作,面向对象是以独享功能来划分问题的,而不是步骤。在面向对象程序开发思想中,每一个独享都是功能中心,具有明确的分工,面向对象编程具有灵活性、可复用性、易维护性、和容易开发等优点,适合多人合作的大型软件项目。

面对对象编程的特性:

  • 封装性

把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

  • 继承性

指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

  • 多态性

指一个类实例的相同方法在不同情形有不同表现形式。

JS 的组成

js = ECMAScript + DOM + BOM + 高级

ECMAScript(前身为欧洲计算机制造商协会):JavaScript的语法规范

DOM(Document Object Model 的文档对象模型简称):JavaScript操作网页上元素的API

BOM(Browser Object Model 的浏览器对象模型简称):JavaScript操作浏览器部分功能的API

JS的作用与书写位置

JavaScript的最基本功能是控制网页中的元素

当然,第一点应该是把JavaScript脚本写在脚本对里。并且JavaScript语言是区分大小写的。所以一般情况下,JavaScript的书写位置有内嵌式外链式两种

内嵌式:
  一般放在body里面的最后,有时放在head标签中(需要写页面加载函数)。




JS Bin
hello

JS 的书写位置

? 因为代码的顺序都是从上往下加载,在 body 中的元素,如果在js中获取body中元素的时候,会报错找不到。

外链式:
  src=”外部js文件路径”

变量和流程控制

变量的声明和初始化

var number               // 变量的声明,没有赋值 undefined
var name = "Hello";      // 变量的初始化
var NAME= "hello"
var 你好 = "你好" // 不推荐

命名规则(驼峰命名)

和Java一样,JavaScript采用的是驼峰式命名,

  • 变量命名必须以字母或是下标符号 "_" 或者 "$" 为开头。
  • 变量名长度不能超过 255 个字符。
  • 变量名中不允许使用空格,首个字不能为数字。
  • 不用使用脚本语言中保留的关键字及保留符号作为变量名。
  • 变量名区分大小写
  • 汉语可以作为变量名。但是不建议使用!

数据类型

基本数据类型
  • String 字符串
  • Number 数字
  • Boolean : true / false
  • undefined 未定义
  • null 空
  • symbol (ES6 引入了一种新的原始数据类型)
复杂数据类型
  • Object 对象
  • Function 函数
  • Array 数组
  • Date 日期
  • Error 错误
类型判断 instanceof / typeof
var arr = []
console.log(typeof arr) //object
console.log(arr instanceof Array) // true
类型转换
var weightIncrease ="2.5斤"
parseInt(weightIncrease)  //2
parseFloat(weightIncrease) //2.5
文本字符串操作
var words="十三是个大胖子"
words.length  //7
words.charAt(0)  //十
words.charAt(words.length-1)  //胖
words.indexOf("胖") //5
words.substring(0,2) //十三
words.replace(‘胖子‘,‘瘦子‘)  //"十三是个大瘦子"
var words="十三,是个大胖子"
words.split(‘,‘)  //["十三,是个大胖子"] 

文本字符串的操作跟其他语言的操作时差不多的,具体的用到时候可以再查。

数组操作
var arr=[]; 
typeof(arr) //"object"
arr=[‘十三‘,‘是个‘,‘大胖子‘]; //(3)["十三", "是个", "大胖子"]
arr.length; //3
arr[0]; //"十三"
arr[3] =‘?‘; //"?"    数组变成  (4)["十三", "是个", "大胖子", "?"]
arr.push(‘@‘);   //5   数组变成  (5)["十三", "是个", "大胖子", "?","@"]
arr.pop();  //@   删除掉数组中的最后一个元素,并返回这个元素   数组变成 (4)["十三", "是个", "大胖子", "?"]
arr.shift(); //十三  删除掉数组中的第一个元素,并返回这个元素   数组变成 (3)[ "是个", "大胖子", "?"]
delete arr[2]; //true  删除数组指定位置的元素,但不改变数组长度返回true  数组变成: ["是个", "大胖子", empty]
arr.splice(2)  //[empty]  删除指定位置元素,并返回删除的元素,改变数组长度  数组变成["是个", "大胖子"]
var arr1=["32","1","0"] 
var arr2=arr1.concat(arr);   //合并数组   (5)?["32", "1", "0", "是个", "大胖子"]

null和undefined的理解和应用

undefined是JavaScript中的一大特点,是JAVASCRIPT独有的数据和数据类型(这种数据类型只有这个一值,就是undefined,它的类型也是undefied),既然它是JAVASCRIPT独有的一种数据类型,所以需要特殊关注一下

在JAVASCRIPT里,null和undefined都表示不存在的数据,并且undefined也是从null中继承而来,那null是什么?undefined又是什么?它们两个又有什么共性和区别呢,请看下面的描述:

  1. null和undefined都是表示没有的、不存在的值。它们两个在进行逻辑转换时都是false,这两个值进行比较是true。
  2. null表示空引用,它是object类型。undefined表示未定义, 它是undefined类型。
  3. 如果一个变量的值是null,那么必须主动的给它赋值null。
  4. 一个变量未定义,或一个变量定义了未赋值,则是undefined。需要注意的是:一个变量如果没有定义,是不能直接在程序里使用的(就不是不能直接读取这个变量,但可以赋值)。比如说:本来没有定义一个叫a的变量
    但我直接去alert(a);//在浏览器里这样是个语法错误,但是可用typeof去运算
    但如果a定义了,未赋值,可以读,它的值就是undefined,如果用typeof去运算,那它的类型也是undefined。
  5. 对说属性来说:如果原来没有这个属性,根本就不存在这个属性,那么它的值就是undefined。对象的属性不需要定义,如果不存在也可以直接去读,不会报错,而会给出一个undefined的值来。
  6. 如果这个对象以后要用,但是现在还没有值,一般情况下,会给它一个null值。
  7. 在函数(方法)里,如果必须返回值,但是值又计算不出来,那就返回一个null(这是规范,而不是语法规定,JAVASCRIPT里遵循这一规范)。比如网页中没有一个id是div2的元素,则下面的这句脚本则返回null
    document.getElementById(‘div2‘);//返回null。
    但是,没有返回值的函数,它的返回值都是undefined。

在JavaScript编程实践中,如果一个变量以后要用到,现在就要定义,那我们就主动给它一个null值,虽然只定义不赋值也没有什么错误。比如以后在动画中要定义一个定时器变量,就是:var timer=null;就表示这个timer是提前定义的,以后要用,当然你也可以不给它这个null,就是直接写一个var timer;这样也没问题,不会有什么语法错误,它的值自动就是undefined,也表示一个不存在的值的。主动把null赋给timer,就是为了强调这个变量是提前预留出来的。

判断JavaScript中一些对象的属性时,也遵循这个原则,如果一个对象的属性根本就没定义过,则它是undefined;如果是null,则表示这是个本来就有的属性,只是没有值。比如说一个网页元素的parentNode这个属性,表示是这个网页元素的父节点,这是个系统规定的(法定的)的法性,一般情况这个属性的值是一个网页元素,但它的值也有为null的时候,比如:document.parentNode,这个就是null,因为它有parentNode这个属性,只不过它是顶级元素,不存父节点而已。但是它不是undefined,如果是undefined表示这个属性根本就没有定义(声明)过。

这个在调试JavaScript时非常有用,如果你调试某一个属性的值是undefined,那说明你可能把这个属性写错了,除非你在直接读取一个你从来没有操作过的自定义属性。

运算符

比较运算符

比如x=5

运算符 描述 比较 返回
== 等于 x == 8 false
x == 5 true
x == "5" true
=== 值相等并且类型相等 x === 5 true
x === "5" false
!= 不相等 x != 8 true
!== 值不相等或类型不相等 x !== 5 false
x !== "5" true
x !== 8 true
> 大于 x > 8 false
小于 x true
>= 大于或等于 x >= 8 false
小于或等于 x true
逻辑运算符

给定 x = 6 且 y = 3,下表解释了逻辑运算符:

运算符 描述 例子
&& (x 1) 为 true
|| (x == 5 || y == 5) 为 false
! !(x == y) 为 true
条件(三元)运算符

JavaScript 也包含了可基于某些条件向变量赋值的条件运算符。

语法

variablename = (condition) ? value1:value2

实例

var voteable = (age 
js中不同类型作比较的规律(布尔运算)
类型 类型 规律 其它说明
对象 对象 比较是不是同一个内存地址
对象 字符串 对象先转化为字符串,然后做比较
对象 布尔类型 两边都要先转为数字(false是0,true是1)。是对象类型先隐式调用toString方法,然后再Number() alert([]false); alert([]0) alert([1]1); alert([1]true) alert([2]==true)
对象 数字 对象要转为数字,再进行比较(对象先隐式调用toString方法转化为字符串,然后再把这个字符串轮化为数字,相当于把这个字符串放到Number这个方法中)
数字 布尔 是进行的数字的比较
数字 字符串 把字符串转化为数,再比较
布尔 把两边都要转化为数字再进行比较
null undefined true
null,undefined 和其它类型 null和undefined和其它类型比较都是false(这两个对象没toString方法) alert(nullfalse) alert(null0) alert(null=="");;

流程控制

流程控制和java中是差不多的

  • if...else...
var weather=‘sunny‘,tempperature=26  ;

if((weather === ‘sunny‘) && (tempperature 
  • while (true) {}
var i=0;
while(i
  • for(var a=0;a
for (var i=1;i 
  • switch
//注意: switch 底层用的是 === 比较
switch ("1"){
    case 1:
        alert(1);
        break;
    case 1:
        alert(1);
        break;
    case 3:
        alert(3);
        break;
    default :
        alert("都不是!");
        break;
}

注意:如果 switch 的判断条件为 false 的话,case的所有语句都不执行,只执行default的语句

js代码的注意问题:

  1. 在一对script的标签中有错误的js代码,那么该错误的代码后面的js代码不会执行
  2. 如果第一对的script标签中有错误,不会影响后面的script标签中的js代码执行。
  3. script标签里面可以写的内容:type="text/javascript" 标准写法,或者 language="JavaScript",都是可以省略的,原因是在html开头写了遵循h5标准。
  4. script标签可以出现多对
  5. 如果使用引入外部js文件的方式,那么不要在script标签里面写任何js代码,如果想写,就新开一对script标签。

异常捕获

try...catch...finally

在程序中都会有对于异常的处理,这里看一下JavaScript对于异常的处理和java中的异常处理是一样的,都是用try,catch去捕获处理的。

try{
	//可能会发生异常的代码
}catch(err){
	//错误的处理
}

写个demo

Throw

可以通过throw语句创建一个自定义错误,大致用法和java中一样,但是js中不分那么多异常类,都是弱类型,直接抛出字符串就可以,下面看一个demo



    Document

其实还有一种onerror() 语法可以用来捕获网页中的错误,但是这是一种老式的标准,除了IE之外主流的浏览器不太支持。所以不多赘述。

函数和变量

函数

函是fnuction一词翻译过来的,也叫方法,其实叫“功能”我认为更妥当,就是对一个功能的描述或定义,在JavaScript中,function关键定义了一个功能(或叫函数、方法、行为)。

函数本来就是对象类型的数据,但由于在JavaScript语言中有着非常突出的地位,所以把函数也单独成一种数据类型了,就是function类型。就是说你首先要知道函数本身是对象类型的。

定义方法

定义方法有两种方式 声明式函数表达式

声明式

函数就是包裹在花括号中的若干代码块,前面使用了关键词 function:

function functionName (parmeter1&a


评论


亲,登录后才可以留言!