继上篇:

3、JavaScript运算符

①:比较运算符:

 >      >=      <     <=       !=     ==     ===    !==
大于    大于等于  小于  小于等于   不等于  弱等于  强等于  强不等于

注意:

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

②:逻辑运算符:

&&   ||   !
与   或   非
and  or  not

③:赋值运算符:

= += -= *= /=

④:算数运算符:

+ - * / % ++ --

需要注意的:

--------------------------------------------------------------------注:如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
--------------------------------------------------------------------var x = 10;var res1 = x++;var res2 = ++x;res1;>10res2;>12解析:res1=x++是先将x赋值给res1,然后x++自增长1res2=++x,上面x自增长了1,所以是11,然后++x是先自增长1变成12,再将其赋值给res2,所以res2为12

4、JavaScript流程控制

#1: if>>else
  
  #3: switch
  #4: for
  #5: while
  
   #6: 三元运算
   5、JavaScript函数

JavaScript中的函数定义方式:

  • 几种常见的函数形式:
// 普通函数定义:
function f1(){console.log('hw');
}// 带参数的函数:
function f2(a,b){console.log(arguments);  // 内置的arguments对象console.log(arguments.length);console.log(a, b);
}// 带返回值的函数:
function sum(a,b){return a+b;
}sum(1.2);   //调用函数// 匿名函数方式:
var sum = function(a,b){return a+b;
}
  • 特殊函数形式:
// ES6中允许使用“箭头”(=>)定义函数。
var f = v => v;
// 等同于
var f = function(v){return v;
}// 如果箭头函数不需要参数或需要多个参数,就是用圆括号代表参数部分:
var f = () => 5;
// 等同于
var f = function(){return 5};var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2){return num1 + num2;  //这里的return只能返回一个值,如果想返回多个值需要自己手动给他们包一个数组或对象中
}

函数的全局变量和局部变量
局部变量:在JavaScript的函数内部声明的变量(使用var)是局部变量,所以只能在函数内部访问它,只要函数运行完毕,本地变量就会被删除。
全局变量:在函数外面声明的变量就是全局变量,网页上的所有脚本和函数都能访问和使用它。
变量生成的周期:
JavaScript的变量的生命期是从他们被声明的时候开始的。
局部变量会在函数运行以后删除。
全局变量会在页面关闭后删除。
作用域:在函数内部查找变量,找不到则到外层全局作用域去找,逐步找到最外层。(下面通过几个例子来了解JavaScript的全局变量和局部变量的含义)

1.
var city = 'BJ';
function f(){var city = 'SH';function inner(){var city = 'SZ';console.log(city);}inner();
}
f();     //结果为SZ
// 分析:f()>inner()>声明了city=‘sz’,然后打印city,inner函数内就有city,所以无需从其他地方查找,打印结果为SZ。2.
var city1 = 'Wuhan';
function Bar(){console.log(city1);
}
function f(){var city1 = 'Erdos';return Bar;
}
var ret = f();
ret();   //结果为Wuhan
// 分析:ret()>f()()>bar()>bar内没有city1,只能从bar外找,bar外面有city1=‘WuHan’,所以打印结果为WuHan。3.
var city2 = 'BeiJing';
function f(){var city2 = 'ShangHai';function inner(){console.log(city2);}return inner;
}
var ret = f();
ret();      //结果为:ShangHai
// 分析:ret()>f()()>inner()>inner内无city2,从inner开始往外找,inner外是f函数,f函数内部有city='ShangHai',所以打印结果

6、JavaScript词法分析(了解知识点)

avaScript中在调用函数的那一瞬间,会先进行词法分析。词法分析的过程:当函数调用的前一瞬间,会先形成一个激活对象:Avtive 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);
}
foo();  // 问:执行foo()之后的结果是?(22)第二题:
var age = 18;
function foo(){console.log(age);var age = 22;console.log(age);function age(){console.log("呵呵");}console.log(age);
}
foo();  // 执行后的结果是?(22)
词法分析过程:
1、分析参数,有一个参数,形成一个 AO.age=undefine;
2、分析变量声明,有一个 var age, 发现 AO 上面已经有一个 AO.age,因此不做任何处理
3、分析函数声明,有一个 function age(){...} 声明, 则把原有的 age 覆盖成 AO.age=function(){...};最终,AO上的属性只有一个age,并且值为一个函数声明执行过程:
注意:执行过程中所有的值都是从AO对象上去寻找1、执行第一个 console.log(age) 时,此时的 AO.age 是一个函数,所以第一个输出的一个函数
2、这句 var age=22; 是对 AO.age 的属性赋值, 此时AO.age=22 ,所以在第二个输出的是 2
3、同理第三个输出的还是22, 因为中间再没有改变age值的语句了

7、JavaScript内置对象

在JavaScript中,所有的事物都是对象:字符串、数字、数字、日期…等等。在JavaScript中对象是拥有属性和方法的数据。
   # 自定义对象:JavaScript中的对象本质上是键值对的集合(Hash结构),但是只能用字符串作为key.

var a = {'name':'sgt', 'age':16};
console.log(a.name);
console.log(a['age']);
//结果:
//sgt
//16//遍历对象中的内容:
var a = {"name": "sgt", "age": 16};
for (var i in a){console.log(i, a[i]);
}
//结果:
//name sgt
//age 16
  • 创建对象:
var teacher = new object();      // 创建一个teacher对象
teacher.name = 'sgt';            // 添加teacher对象的name属性
teacher.age = 18;                // 添加teacher对象的age属性
  • 拓展:
注意: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)  // true
m.delete(o)  // true
m.has(o) // false
// 父类构造函数
var Car = function (loc) {this.loc = loc;
};// 父类方法
Car.prototype.move = function () {this.loc ++;
};// 子类构造函数
var Van = function (loc) {Car.call(this, loc);
};// 继承父类的方法
Van.prototype = Object.create(Car.prototype);
// 修复 constructor
Van.prototype.constructor = Van;
// 扩展方法
Van.prototype.grab = function () {/* ... */
};
  • Date对象:
//创建Date对象:
//方法1:不指定参数:
var d1 = new Date();
console.log(d1.toLocaleString());
//2019/6/1 下午3:11:18//方法2:参数为日期字符串:
var d2 = new Date('2004/3/20 11:12');
console.log(d2.toLocaleString());
//2004/3/20 上午11:12:00//方法3:参数为毫秒数:
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());
//1970/1/1 上午8:00:05
//Thu, 01 Jan 1970 00:00:05 GMT//方法4:参数为年月日小时分钟秒毫秒:
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString());
//2004/3/20 上午11:12:00     //毫秒并不直接显示

Date对象的方法:

var d = new Date();d.getDate();          //获取当前日(今天多少号)
d.getDay();           //获取星期(比如从星期天到星期六依次是0-6)
d.getMonth();         //获取月份数(0-11,0是一月,11是12月,依次类推)
d.getFullYear();      //获取完整的年份2019
d.getYear();          //获取年119
d.getHours();         //获取小时15
d.getMinutes();       //获取分钟22
d.getSeconds();       //获取秒53
d.getMilliseconds();  //获取毫秒513
d.getTime();          //返回累计毫秒数(从1970/1/1午夜)1559373773513

应用:将当前日期按照‘2019-12-27 11:11 星期三’格式输出

const WEEKMAP = {0:'星期天',
1:'星期一',
2:'星期二',
3:'星期三',
4:'星期四',
5:'星期五',
6:'星期六'};function showTime() {var y1 = d.getFullYear();var m1 = d.getMonth()+1;var d1 = d.getDate();var h1 = d.getHours();var mm1 = d.getMinutes() < 10 ? '0'+d.getMinutes():d.getMinutes();var w1 = WEEKMAP[d.getDay()];my_time = `${y1}-${m1}-${d1} ${h1}:${mm1} ${w1}`;console.log(my_time)
};showTime();
2019-6-1 15:41 星期六

JSON对象:

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}$/;// 正则校验数据
reg1.test('jason666')
reg2.test('jason666')/*第一个注意事项,正则表达式中不能有空格*/ // 全局匹配
var s1 = 'egondsb dsb dsb';
s1.match(/s/)
s1.match(/s/g)
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g
reg2.test('egondsb');
reg2.test('egondsb');
reg2.lastIndex;
/*第二个注意事项,全局匹配时有一个lastIndex属性*/// 校验时不传参数
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/
reg2.test();
reg2.test(undefined);var reg3 = /undefined/;
reg3.test();

Math对象(拓展知识)

abs(x)      返回数的绝对值。
exp(x)      返回 e 的指数。
floor(x)    对数进行下舍入。
log(x)      返回数的自然对数(底为e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次幂。
random()    返回 0 ~ 1 之间的随机数。
round(x)    把数四舍五入为最接近的整数。
sin(x)      返回数的正弦。
sqrt(x)     返回数的平方根。
tan(x)      返回角的正切。

前端基础之JavaScript_1(二)相关推荐

  1. (硅谷课堂项目)Java开发笔记4:前端基础知识(二)

    文章目录 (硅谷课堂项目)Java开发笔记4:前端基础知识(二) 一.NPM 1.NPM简介 1.1.什么是NPM 1.2.NPM工具的安装位置 2.使用npm管理项目 2.1.创建文件夹npm 2. ...

  2. day04-硅谷课堂-前端基础知识(二)

    硅谷课堂第四天-前端基础知识 文章目录 硅谷课堂第四天-前端基础知识 一.NPM 1.NPM简介 1.1.什么是NPM 1.2.NPM工具的安装位置 2.使用npm管理项目 2.1.创建文件夹npm ...

  3. 前端基础之JavaScript_1(一)

    阅读目录 摘要: 1:JavaScript简介 引入方式 语言规范 2:JavaScript语言基础 变量声明 数据类型 运算符 流程控制 函数 词法分析 内置对象 一.JavaScript概述 1. ...

  4. 前端基础进阶(二):执行上下文详细图解

    我们在JS学习初期或者面试的时候常常会遇到考核变量提升的思考题.比如先来一个简单一点的. console.log(a); // 这里会打印出什么? var a = 20; 暂时先不管这个例子,我们先引 ...

  5. html表格列表模板,前端基础 - HTML(二) 表格、表单、列表

    表格 table标签用于定义表格 tr 必须嵌套在table标签中 td 必须嵌套在tr中 表格的基本语法: ↑---border代表边框线 align代表位置 right左边left(右边)cent ...

  6. ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...

    JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...

  7. gif透明背景动画_前端基础系列之bmp、jpg、png、gif、svg常用图片格式浅谈(二)...

    IT客栈 作者:大腰子 bmp.jpg.png.gif.svg常用图片格式 之前为大家介绍了几种WEB前端常用的图片格式,对比了它们的特点,参见<前端基础系列之bmp.jpg.png.gif.s ...

  8. element ui 图片控件 排序_JAVA全栈面试前端基础之四 Vue+Element框架快速开发

    本文主要包括以下4个内容 什么是ElementUI Vue 中引入ElementUI Vue+elementUI构建后台管理系统 开源项目推荐 1.什么是ElementUI 官网:https://el ...

  9. 前端基础-HTML的的标签详解

    阅读目录 一.head内常用标签 二. HTML语义化 三. 字符实体 四. h系列标签 五. p标签 六. img标签 七. a标签 八. 列表标签 九. table标签 十. form标签 一. ...

最新文章

  1. 13.QT信号槽的连接方式
  2. opencv滤波美颜
  3. 无盘服务器怎么修改ip,怎么进入无盘服务器修改IP地址呢
  4. Vue组件多次点击报错Avoided redundant navigation to current location: “/profile“.
  5. boost::foreach模块一些杂项的测试程序
  6. 信贷ABS资产静态池与动态池里的数据分析内容都有啥
  7. html输入参数,传递输入参数,通过Html.ActionLink
  8. 2022年APP系统软件开发费用一览表介绍
  9. 【线代】相似矩阵中特征根的求法:特征方程、一般方程为什么求得的特征根含义不同?
  10. 用辩证数学解答“缸中之脑”
  11. 爬取校花图片保存到本地文件夹下(requests+re)
  12. 哪里有日语50音图的发音啊?
  13. 国内外最好的12款项目管理系统优劣势分析
  14. 室内施工图LiSP_CAD快速做室内设计图的技巧
  15. IOS 发布被拒 PLA 1.2问题 整个过程介绍 03 个人账户升级公司账户
  16. 金融风控-贷款违约预测学习笔记(Part3:特征工程)
  17. 清除浮动的四种样式写法
  18. 立即报名 | 云原生技术交流 Meetup 广州站已开启,8 月 6 号与你相遇!
  19. dedecms教程:织梦所有实用标签调用方法搜集整理
  20. 如何组装一个注册中心

热门文章

  1. byte数组转字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)...
  2. centos mysql tar 安装mysql_centos 安装 mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz 详细步骤
  3. 【如何利用idea提交本地代码到git远程仓库,史上最详细教程,建议收藏!】
  4. jmeter生成优美的压力测试报告,jmeter生成html压测报告,jmeter压力测试
  5. Java向数据库中插入Boolean类型的字段
  6. VisualSVN Server Manager创建版本库以及TortoiseSVN的使用
  7. 桂林电子科技大学计算机导论,Welcome to Guilin University of Electronic Technology(桂林电子科技大学)...
  8. 基于fpga的计算机组成原理,清华大学出版社-图书详情-《基于FPGA与Verilog的计算机组成原理实践》...
  9. SQL解析器的性能测试
  10. 关于tomcat出现闪退问题