博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 介绍
阅读量:5335 次
发布时间:2019-06-15

本文共 10497 字,大约阅读时间需要 34 分钟。

一:JavaScript与ECMAScript的关系

  ECMAScrip 和 JavaScipt的关系是,前者是后者的规格,后者是前者的一种体现。

  ps:一般来说ECMAScript就叫JavaScript。

  

二:JavaScript引入方式

  1:在script标签内部

  2.:引入额外的JS文件

    
Title

   ps:注释:// 是单行注释。/*多行注释*/ 。结束语:JavaScript 中是以;为结束符。

 

三:JavaScript语言基础

  变量:

    声明规则:var 变量名

    变量名:可以使用_,数字,字母,$组成,不能以数字开头。

    注意:变量名区分大小写的,推荐使用用驼峰体命名方式,保留过的字不能用做变量名。

  ps:

    ES6新增 let 来声明变量。相对于var的好处是 let 只在命令所在的代码块有效。比如在for循环内声明变量。

    ES6新增const用来声明变量。一旦声明,其值就不能改变。

const PI = 3.1415;undefinedPI3.1415PI = 3VM61:1 Uncaught TypeError: Assignment to constant variable.    at 
:1:4(anonymous) @ VM61:1var egon = 'lin';undefinedegon"lin"var egon = 'hai';undefinedegon"hai"var PI = 3;VM167:1 Uncaught SyntaxError: Identifier 'PI' has already been declared at
:1:1(anonymous) @ VM167:1

 ps :其他定义变量的方式:

abstractbooleanbytecharclassconstdebuggerdoubleenumexportextendsfinalfloatgotoimplementsimportintinterfacelongnativepackageprivateprotectedpublicshortstaticsupersynchronizedthrowstransientvolatile

四:JavaScript的数据类型  

  1.JavaScript拥有动态类型(ps:声明变量不赋值的话,默认值为underfined)

  2.不区分整型和浮点型,只有一种数据类型。(parseInt 相当于python中的Int ,将字符串形式里面的数字转化为真正的数据类型,NAN表示不是数字)

  3.字符串的常用方法:(打印:console.log(c);)

      返回长度:.length

      移出空白:.trim() .trimLeft() .trimRight() (只能移出两边的空格,不能移除中间的空格)

      返回第n个字符:.charAt(n)

      拼接:.concat(...) (根据原来的字符串往后拼接) 【拼接字符串常用符号是+号】

      子序列位置:.indexOf(substring, start)

      根据索引获取子序列:.substring(from, to)

          语法:string.substring(start,stop)

          1,start > stop ,start和stop将被交换

          2,如果参数是负数或者不是数字,将会被0替换

      切片 :.slice(start, end)

          语法:string.slice (start,stop)

          1,start > stop ,不会交换两者。

          2,start小于0,则切割从字符串末尾往前数的第abs(start)个的字符开始(包括该位置的字符)

          3,stop小于0,则切割在从字符串末尾往前数的第abs(stop)个字符结束(不包含该位置字符)

      小写:.toLowerCase()

      大写:.toUpperCase()

      分割:.split(delimiter, limit)

      ps:(ES6中引入了模板字符串。模板字符串(template string)是增强版的字符串,用反引号(`)(ESC下面的符号)标识。它可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。)【如果在模板字符串内部要用到反引号,要加上/来转义】

五,布尔值

  JavaScript的bool值是true 和 false(注意是小写)。

  ps:空字符串,0,null,undefined,NaN都是false。

    null:清空一个变量使用(name = null)

    undefined:两种情况,1:声明一个变量未初始化。2:没有明确返回值的函数。

六,对象

  JavaScript中的所有事物都是对象:字符串,数值,数组,函数等等,JavaScript允许自定义对象。

  对象:既带有属性和方法的特殊数据类型。

七,数组

  数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。

  方法:

  获取数组的大小:.length

  尾部追加元素:.push(ele)

  获取尾部的元素,(将其从原列表中拿出):.pop()

  头部插入元素:unshift(ele)

  头部移除元素:shift()

  切片:slice(start,end)

  反转:reverse()

  将数据元素连接成字符串:join(seq)

  连接数组:concat()  (相当于python中的extend)

  排序:.sort()

    关于sort()需要注意:

    如果调用该方法没有使用参数,将按字母顺序对数组中的元素进行排序,排序的方式是按照字符编码的顺序进行排序。

    因此需要把数组中的元素转化为字符串形式。

    

  将数组的每个元素传递给回调函数:.forEach()

    语法:forEach(funtion(currentValue,index,arr),thisValue)

        currentValue:必需。当前元素。

        index:可选。当前元素的索引值。

        arr:可选。当前元素所属的数组对象。

        thisValue:可选。传递函数的值一般用‘this’值。如果这个参数为空,‘undefined’会传递‘this’值。

li.forEach(function(v,i,a){console.log(v,i,a)}); 77 0 (3) [77, 88, 99] 88 1 (3) [77, 88, 99] 99 2 (3) [77, 88, 99]

  删除元素,并向数组添加新元素:splice()

    语法:splice(index,howmany,item1...itemx)

      index:必需,规定从何处添加(删除)元素。该参数是删除元素的索引,必须是数字。

      howmany:必需,规定应该删除多少元素,必需是数字,但可以是‘0’。如果未规定此参数,则删除从index开始到原数组所有元素。

      item:可选。要添加到数组的新元素。

var li = [11,22,33,44,55];undefinedli.splice(2,1,'a');[33]li;(5) [11, 22, "a", 44, 55]

  返回一个数组元素调用函数处理后的值的新数组:.map()

    语法:map(function(currentValue,index,arr),thisValue)

        currentValue:必需,当前元素的值。

        idex:可选。当前元素的索引值。

        arr:可选。当前元素属于的数组对象。

        thisValue:可选。对象作为该执行回调时使用,传递给函数。用作‘this’的值。

             如果省略thisValue,‘this’的值为'undefined'

li.map(function(v,i,a){
return v+2});(9) [3, 4, 5, 6, 7, 8, 9, 10, 11]

八,运算符

  1.算术运算符,

    + , - , / , * , % , ++ , -- 

    ps:++ , -- 在出现赋值符号的时候会有所不同。

var a, i = 10;a = i ++; //这里i要先赋值,再自加。语句执行后a=10, i = 11;而如果写成:var a, i = 10;a = ++i; //这里i要先自加,再赋值。语句执行后a=11, i = 11;

  2,比较运算符

    > , >= , < , <= , != , == , === , !==

1 == “1”  // true  弱等于1 === "1"  // false 强等于//上面这张情况出现的原因在于JS是一门弱类型语言(会自动转换数据类型),所以当你用两个等号进行比较时,JS内部会自动先将//数值类型的1转换成字符串类型的1再进行比较,所以我们以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误

 

  3,逻辑运算符

  && , | |, !

  4,赋值运算符

  = , += ,-= , *= , /=

  与python中一样。

九,流程控制

  if - else  语法 : if (条件) {执行代码} else{执行代码};

  if - else if - else :if (条件){执行代码} if else (条件){执行代码} else {执行代码};

  switch :语法:switch (表达式){case n :代码块 break;case n :代码块 break}

      ps:计算一次switch表达式,把每个表达式的值与每个case的值进行对比。如果匹配,就执行相应的代码。

        通常要加break,否则程序会继续执行后续case。

switch (new Date().getDay()) {    case 0:        day = "星期天";        break;    case 1:        day = "星期一";         break;    case 2:        day = "星期二";         break;    case 3:        day = "星期三";         break;    case 4:        day = "星期四";         break;    case 5:        day = "星期五";         break;    case 6:        day = "星期六";}

  for:语法:for(表达式){执行代码} ;

for (var i=0;i<10;i++) {  console.log(i);}

   while:语法:while(条件){执行代码};

var i = 0;while (i < 10) {  console.log(i);  i++;}

  三元运算:

  var voteable = (age < 18) ? "太年轻":"足够成熟";

  条件成立返回:前面的结果给变量,否则返回冒号后面的结构给变量。

var a=10,b=20;var x=a>b ?a:(b=="20")?a:b;

  解释:因为a > b不成立所以执行第一个:后面的的代码,也就是 (b=="20")?a:b,也是一个三元逻辑运算,再做判断,明显,b == '20'成立,所以返回的结果是a,因此x的值为10.

 九,函数:

  普通函数定义:

function f1() {  console.log("Hello world!");}

  带参函数定义:

function f2(a, b) {  console.log(arguments);  // 内置的arguments对象  console.log(arguments.length);  console.log(a, b);}

  带有返回值的函数:

function sum(a, b){  return a + b;}

  匿名函数:

var sum = function(a, b){  return a + b;}

  立即执行函数(也就是定义完函数之后立马运行。)

(function(a, b){  return a + b;})(1, 2);

  ps:一种特殊的定义函数的方式:var 函数名 = (参数)=> 返回值。

var f = v => v;// 等同于var f = function(v){  return v;}

   函数中的arguments参数:arguments相当于包含传入的所有的参数。通过arguments[索引]取出对应的值。

function add(a,b){  console.log(a+b);  console.log(arguments.length); console.log(arguments[0]);//arguments相当于将出传入的参数全部包含,这里取得就是第一个元素1}add(1,2)

  ps:函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回。

  函数的全局变量和局部变量:

  局部变量:

    在函数内部声明的变量(var),只能在函数内部访问它(其作用域就是在函数内部)。

  只要在函数运行完毕,本地变量就被被删除。

  全局变量:

    在函数外声明的变量去全局变量,网页上的所有脚本和函数都能访问它。

  变量生存周期:

    局部变量会在函数运行以后被删除。

    全局变量会在页面关闭后被删除。

  作用域:

    首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层(实际上与python作用域关系查找一样的。)

var city = "BeiJing";function f() {  var city = "ShangHai";  function inner(){    var city = "ShenZhen";    console.log(city);  }  inner();}

    f();输出结果是 shenzhen

var city = "BeiJing";function Bar() {  console.log(city);}function f() {  var city = "ShangHai";  return Bar;}var ret = f();

    ret();输出的结果是 BeiJing

   闭包函数:

var city = "BeiJing";function f(){    var city = "ShangHai";    function inner(){        console.log(city);    }    return inner;}var ret = f();ret();

十,词法分析:

  JavaScript中在调用函数的那一瞬间,会先进行词法分析。

  过程:

    当函数调用的前一瞬间,会先形成一个激活对象:Actve Object(AO),并会分析以下3个方面:

    1.函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。

    2.函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。

    3.函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。

    函数内部无论是使用参数还是使用变量都到AO上找。

    词法分析例题:

var age = 18;function foo(){  console.log(age);  var age = 22;  console.log(age);  function age(){    console.log("呵呵");  }  console.log(age);}foo();  // 执行后的结果是?

  案例分析:

    词法过程:

      1:foo函数没有参数,只产生了了AO对象

      2:生成了局部变量:AO.age = unfefined。

      3:之后又遇到了函数声明,被覆盖:AO.age = (以age为名字的函数)

    执行过程:

      1:执行第一个console,log(age)时,AO.age是个函数

      2:执行第二个console.log(age)时,在此之前age  = 22,执行了,因此结果为22

      3:执行第三个console.log(age)时,age没有被修改,还是22.

十一:内置对象和方法

   JavaScript中的所有的事物都是对象:字符串,数字,数组,日期,等等。

    数据类型:

      数字对象:Number

      字符串:String

      布尔值对象:Boolean

    组合对象:

      数字对象:Array

      数学对象:Math

      日期对象:Date

    高级对象:

      自定义对象:Object

      错误对象:Error

      函数对象:Function

      正则表达式对象:RegExp

      全局对象:Global

    自定义对象:

      JavaScript得到对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键。

    创建对象:

      var person = new object()(创建一个person对象)

      person.name = ‘Alex’ (person对象的name属性)

    ps:ES6中提供可Map数据结构。他类似于对象,也是键值对的集合,但是‘键’的范围不限于字符串,各种类型的值(包括对象)都可以当做键。

      Object结构提供了“字符串--值”的对应,Map结构提供了‘值--值’的对应,是一种更完善的Hash结构实现。

var m = new Map();var o = {p: "Hello World"}m.set(o, "content"}m.get(o)  // "content"m.has(o)  // truem.delete(o)  // truem.has(o) // false

十二:Data对象:

  创建Date对象

  1:不指定参数:(输出结果为当前时间)

var d1 = new Date();console.log(d1.toLocaleString());

   2:参数为日期字符串:(输出结果为把输入的参数的格式转变为正常格式)

var d2 = new Date("2004/3/20 11:12");console.log(d2.toLocaleString());

  ps:(此参数的输出格式是日/月/年):

var d3 = new Date("04/03/20 11:12");console.log(d3.toLocaleString());

  3:参数为毫秒(打印结果为中文格式的日期和英文格式的日期):

var d3 = new Date(5000);console.log(d3.toLocaleString());console.log(d3.toUTCString());

  4:参数为年月日小时分钟秒毫秒(毫秒并不之间显示)

var d4 = new Date(2004,2,20,11,12,0,300);console.log(d4.toLocaleString());

  date对象的方法:

    获取日:getDate()

    获取星期:getDay()

    获取月:getMonth()

    获取完整年份:getFullYear()

    获取年:getYear()

    获取小时:getHours()

    获取分钟:getMinutes()

    获取秒:getSeconds()

    获取毫秒:getMilliseconds()

    返回累计毫秒数:getTime(起始日期是:1970/1/1)

  案例:编写代码,当前日期按‘2017-12-27 11:11 星期三格式输出’。

  第一步:首先必需要定义一个对应关系表(0-6对应星期日到星期六)。(最好用const定义成常量)

  第二步:生成日期对象,取出年月日等需要的值(注意week要从定义的常量中取到值)

  第三步:通过字符串拼接: var strTime = `${year}-${month}-${day} ${hour}:${minute} ${week}‘;

  PS:由于取分钟的时候不会显示02这类数字,因此需要额外做字符串拼接处理:

    var minute = d1.getMinutes() < 10?"0"+d1.getMinutes():d1.getMinutes();

const WEEKMAP = {    0:"星期天",  1:"星期一",  2:"星期二",  3:"星期三",  4:"星期四",  5:"星期五",  6:"星期六"}; function showTime() {    var d1 = new Date();    var year = d1.getFullYear();    var month = d1.getMonth() + 1;     var day = d1.getDate();    var hour = d1.getHours();    var minute = d1.getMinutes() < 10?"0"+d1.getMinutes():d1.getMinutes();      var week = WEEKMAP[d1.getDay()];    var strTime = `${year}-${month}-${day} ${hour}:${minute} ${week}`;    console.log(strTime)};showTime();

 十三,json对象

    可以将自动转化为对象,可以点语法来取值 语法:JSON.parse(JSON字符串):

var str1 = '{"name": "Alex", "age": 18}';var obj = JSON.parse(str1);obj.name"Alex"obj.age;18

    也可以将对象转化为JSON字符串

var obj1 = {"name": "Alex", "age": 18};var str = JSON.stringify(obj1);

 十四,RegExp对象

    方式一:new RegExp('正则表达式');

    方式二:/正则表达式/

var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;

    ps:通过生成的RegExp.test(’字符串‘)的方式来判断是否满足正则。返回结果是布尔值,正则中不能又空格。

    注意:

      1,校验时不传参数默认校验'undefined'  

      2,全局匹配时有一个lastIndex属性。

十五,Math对象

  方法:

    返回数的绝对值:abs(x)

    返回e的指数:exp(x)

    对数进行下舍入:floor(x)

    返回数的自然数对数:log(x)

    返回x 和 y 中的最高值:max(x,y)

    返回x 和 y 中的最低值:min(x,y)

    返回x 的 y 次幂:pow(x,y)

    把数四舍五入为最接近的整数:round(x)

    返回数的正弦:sin(x)

    返回0~1之间的随机数:random()

    返回数的平方根:sqrt(x)

    返回数的正切:tan(x)

  

    

 

    

  

  

     

        

  

 

转载于:https://www.cnblogs.com/ay742936292/p/10955138.html

你可能感兴趣的文章
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
web.xml 中加载顺序
查看>>
pycharm激活地址
查看>>
hdu 1207 四柱汉诺塔
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
display:none与visible:hidden的区别
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
京东静态网页练习记录
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>