JS基础

简介

1995年Brendan Eich完成了Javascript设计,网景公司一开始将其命名为LiveScript,后来与Sun公司合作后改名Javascript。

Javascript是运行在客户端的脚本语言。脚本语言不需要编译,运行过程中由JS解释器(JS引擎)逐行解释并执行。

目前Javascript也可以基于nodejs技术进行服务器端编程。

JS的作用:表单动态验证、网页特效、服务端开发(nodejs)、桌面应用程序(Electron)、App(Cordova)、控制硬件-物联网(Ruff)、游戏开发(cocos2d-js)

HTML : 用于描述网页的结构。

CSS: 用于设置网页的样式。

JS:用于控制网页的行为。

浏览器由 渲染引擎 和 JS 引擎 组成。

渲染引擎(内核):用来解析HTML和CSS。

JS引擎:读取JS代码,对其处理后执行。

JS组成:JS语法(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)

ECMAScript:是由EMCA(原欧洲计算机制造商协会)进行标准化的一门编程语言,它规定了编程语法和基础的核心知识,是所有浏览器厂商共同遵守的一套语法工业标准。Javascript(网景)和JScript(微软)都是ECMAScript的扩展与实现。

DOM:W3C组织推荐的处理可扩展标记语言的标准编程接口,通过DOM提供的接口可以对页面的各种元素进行操作。

BOM: 通过BOM可以操作浏览器窗口。

 书写位置


<input type="button" value="点我"  onclick="alert('hello')" /> 
<script>
  // 内嵌式
  alert('你好');
script>

<script src="my.js">script>

// my.js代码如下
alert('外部js文件路径');

注释

// 单行注释
/*
   多行注释
*/

 输入输出语句

 alert('浏览器弹出警告框');
 console.log('控制台打印输出信息');
console.dir(对象); // 打印对象,更好的查看里面的属性和方法 prompt(
'浏览器弹出输入框');

变量

变量:程序在内存中申请一块用来存放数据的空间。

// 声明
var  age;
// 赋值
age = 10;
// 变量初始化 : 声明 + 赋值
var name = 'Tab';
// 使用
console.log(age);
// 修改
name = 'TabPHP';
// 声明多个变量
var year,month,day;

 变量的特殊情况

只声明,不赋值,直接输出为 undefined

不声明,不赋值,直接输出会 报错

不声明,只赋值, 直接输出 相应的值

 命名规范

 由字母、下划线、数字、美元符号组成

 不能以数字开头

 不能是关键字或保留字

 严格区分大小写

 数据类型

 不同的数据在内存中所占的存储空间是不同的。

JS是弱类型语言(动态语言),无需提前声明数据类型,程序运行过程中会自动确定。

 简单数据类型 : Number、String、Boolean、Undefined、Null

 复杂数据类型 : Object

 数字类型 Number : 整数和小数(浮点数)。浮点数的最高精度是17位小数,不要使用浮点数来进行运算。其中整数还可以分二进制、八进制(0开头)、十进制、十六进制(0x开头)。最大值 Number.MAX_VALUE 最小值 Number.MIN_VALUE、无穷大 Infinity 无穷小 -Infinity  非数字  NaN  判断是否为非数字  isNaN()  

 字符串 String  :  双引号 或 单引号 ,由于HTML属性推荐使用双引号,所以JS字符串推荐使用单引号 。字符串转义符都是以 \ 开头 。 字符串长度使用 length属性查看 。字符串拼接 +  数值相加,字符相连。

布尔类型 Boolean :  true、false 。 

 Undefined : 声明了变量未赋值时,变量默认值为 undefined 。 

 Null : 空值

  获取变量数据类型  typeof  变量名; 

  字面量 : 在源代码中的一个固定值。

  数据类型转换 :  

    转字符串:   变量.toString()   、  String(变量) 、 变量  + 任意字符串

    转数值:   parseInt(string) 、 parseFloat(string)  、 Number(变量)  、 隐式转换( - 、 *  、 /)

    转布尔: Boolean(变量)  , 代表空、否定的值(''   0  NaN  null undefined)会被转换为 false , 其他值会被转换为 true

 标识符  开发人员为变量、属性、函数、参数取的名字。

 关键字  JS本身已经使用的名字

 保留字  其实是预留的关键字,即现在虽然不是关键字,但是未来可能会成为关键字。

 运算符(操作符)

算术运算符  +  -   *  /   %    

递增、递减运算符  ++  --  让变量值自增1或自减1,分前置和后置

比较运算符  <  >  >=  <=  ==  !=  ===(全等,数据类型与值都要相等)  !==   返回值是布尔类型

逻辑运算符  &&  ||  !   对布尔值进行运算,返回值也是布尔类型。逻辑中断:当前一个表达式可以确定结果时,后面的表达式不再进行运算。

赋值运算符  =  +=  -=  *=   /=  %=   将右边的值赋值给左边的变量

优先级: 小括号 > 一元运算符 > 算术运算符  > 关系运算符  >  相等运算符  > 逻辑运算符  >  赋值运算符  >  逗号运算符

表达式  由数字、运算符、变量等组成的式子,最终都会有一个结果,这个结果就是返回值

流程控制

顺序结构 : 代码从上往下依次执行  

分支结构 : 根据不同的条件选择性的执行。

  if(条件表达式){}else if{}else{} 

       条件表达式 ?  表达式1 :  表达式2 ;

       switch(表达式){case 值:  执行语句; break; default: 表达式不满足时执行的表达式;}

循环结构 : 根据不同的条件重复执行某些代码。循环要设置终止条件以避免出现死循环的情况。

  for(初始化变量;条件表达式;操作表达式){循环体}     

// 九九乘法表,外层循环控制行,内层循环控制列
        var str = '';
        for (var i = 1; i <= 9; i++) {
            for (var j = 1; j <= i; j++) {
                str += (j + 'x' + i + '=' + j * i + '\t');
            }
            str += '\n';
        }
        console.log(str);

  

JS基础_第1张图片

  while(条件表达式){循环体}

  do{循环体}while(条件表达式)

  continue 立即跳出本次循环,继续执行下一次循环

   break  退出整个循环

断点调试:在程序某一行设置断点,程序运行这一行时就会停住,然后就可以一步一步往下调试,调试过程中可以看到各个变量的当前值。浏览器 > F12 > source > 设置断点后要重新刷新页面。

数组 可以将一组相关的数据存放在一起,方便访问和获取 。数组中的每个数据称为数组元素。元素可以是任何类型,元素之间用逗号分隔。

创建数组:  var 数组名 = new Array();   或      var 数组名 = [];

获取数组元素:   数组名[下标]   ,  下标由0开始

获取数组长度:数组名.length

遍历数组: 将数组中的每个元素从头到尾访问一次。

var arr = [1,2,3];
for(var i=0;i){
  console.log(arr[i]);  
}

新增数组元素: 1、增加数组长度,新增的元素默认值为undefined  2、追加数组元素,例: 数组名[新下标] = 值;  // 如果下标已存在,则是替换

冒泡排序   

从小到大排序:相邻两个元素比较,若左边的值大于右边的值,则两者交换位置。

从大到小排序:相邻两个元素比较,若左边的值小于右边的值,则两者交换位置。

        var arr = [1, 2, 3, 4, 5];
        for (var i = 0; i < arr.length - 1; i++) {
            for (var j = 0; j < arr.length - i; j++) {
                if (arr[j] < arr[j + 1]) {
                    var temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }

 函数  将一个或多个功能封装到函数中,对外提供一个简单的函数接口,可提高代码的复用率

// 声明函数1
function 函数名 (形参列表) { //函数体  或 return 返回值; }     

// return后面的语句将不会再执行,如果返回值是用逗号隔开的值列表,那么只有最后一个值会被返回。如果函数没有返回值,则默认返回undefined
// arguments是函数内置的一个对象,存储着传递到函数中的所有实参,存储方式为伪数组形式,可以通过arguments.length获取长度,arguments[下标]获取相应的实参,但不具备数组的push,pop等方法
// 调用函数1
函数名(实参列表);
// 函数声明2 将匿名函数赋值给一个变量
var 变量名 = function(形参列表){ // 函数体}
// 调用函数2
变量名(实参列表);

 作用域 

全局作用域 : 整个script标签  或  一个单独的js文件。  在些作用域的声明变量称为全局变量。浏览器关闭时才会销毁,比较占内存。

局部作用域:     函数内。在此作用域的声明变量称为局部变量。如果在此作用域未声明而直接使用的变量,属于全局变量。函数运行结束后销毁,比较节省空间。

块级作用域 {}   es6新增

作用域链: 内部函数访问外部函数的变量,采用的是链式查找(一层一层往上查找)的方式来决定取哪个值。

预解析

JS解析运行JS代码时分两个步骤:预解析 、 代码执行。

预解析: JS解析器会将JS里所有var和function提升到当前作用域的最前面。分为 变量预解析(变量提升)和函数预解析(函数提升)

  变量提升:把所有变量声明提升到当前作用域最前面,不提升赋值操作。

  函数提升:把所有的函数声明提升到当前作用域最前面,不调用函数。

代码执行:按照代码书写顺序从上往下执行。

对象

对象:是一组无序的相关属性(事物的特征)和方法(事物的行为)的集合。是一个具体的事物。

创建对象: 

  var 对象名 = {属性名:值 ,方法名: function(){} }; // 字面量方式     

  var 对象名=new Object(); // 创建一个空对象  

  构造函数:主要用来初始化对象,将对象里面的一些相同属性和方法抽象出来封装到函数里面。构造函数名首字母大写。主要泛指某类事物。

   function 构造函数名(形参列表) {this.属性名 = 值;  this.方法名 = function(){} }   // this 指向当前对象

   var  对象名 = new 构造函数名(实参列表);

使用对象: 对象名.属性名  或 对象名['属性名']  或  对象名.方法名()

遍历对象属性: for (var key in obj) {}  // k变量接收的是属性名  obj[k]  对应属性的值

JS中对象分为3类:自定义对象、内置对象、浏览器对象

内置对象

JS语言自带的对象,这些对象给开发者提供一些常用的功能(属性与方法)。

Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法。它的所有属性与方法都是静态的。

  Math.PI  Math.floor()  Math.ceil()  Math.round()  Math.abs()  Math.max  Math.min()   Math.random()

  两个数之间的随机整数(包含这两个数):  Math.floor(Math.random() * (max - min + 1) + min);

Date  用于处理日期与时间,基于1970年1月1日(世界标准时间)起的毫秒数。 

  new Date();   new Date('2020-10-10 12:00:00')  

  dateObj.getFullYear()  dateObj.getMonth()  dateObj.getDate()  dateObj.getDay()   dateObj.getHours()   dateObj.getHours()  dateObj.getMinutes()  dateObj.getSeconds()

  dateObj.valueOf()  dateObj.getTime()   +new Date()    Date.now() // h5新增

Array 数组内置对象

  new Array()     

       数组元素添加与删除 arrObj.push()   arrObj.unshift()    arrObj.pop()   arrObj.shift()   

       数组反转与排序  arrObj.reverse()  arrObj.sort()  

  数组元素位置查询  arrObj.indexOf()   arrObj.lastIndexOf()  

  转字符串  arrObj.toString()    arrObj.join(分隔符)

  arrObj.concat()    arrObj.slice()   arrObj.splice()    

  检测是否为数组  arr instanceOf Araay   或  Array.isArray()   // h5新增方法    

String 字符串内置对象

  字符串的值是不可变的,平时看到的修改字符串,其实是新开辟的一块内存空间将入新的字符串,再将原字符串的地址指向新开辟的内存空间。

  查找字符在字符串中的位置 strObj.indexOf()    strObj.lastIndexOf()   

  根据位置返回字符   strObj.charAt()  strObj.charCodeAt()   str[index]  //  h5新增

   字符串操作  strObj.concat()  strObj.substr()   strObj.slice()   strObj.substring()  strObj.replace()   strObj.split()   strObj.toUpperCase()  strObj.toLowerCase()  

简单数据类型(值类型)与复杂数据类型(引用类型)

基本包装类型:就是将简单的数据类型包装成了复杂的数据类型。String、Number、Boolean

堆空间:存储复杂数据类型,一般由程序员分配与释放内存空间,若程序员不释放,由垃圾回收机制回收。

栈空间:存放简单数据类型,由操作系统自动分配和释放内存空间。

 

你可能感兴趣的:(JS基础)