词法
编程语言的词法结构是一套基础性的规则,用来描述如何使用这门语言来编写程序。作为语法的基础,它规定了变量名是什么样的、怎样写注释、以及程序语句之间如何分割等规则。
2.1 字符集:js是用Unicode字符集编写的。
2.1.1 区分大小写
2.1.2 空格、换行符和格式换行符
js会自动忽略空格和换行,因此作为语句分割的';'可以省略。但也有两个特例
! break,return,continue之后不可以紧跟换行
return
true //return;true
! ++ --将作为下一行的前缀;
x
++
y //x++;y
拓展
变量
- 变量命名规范
1.区分大小写
var test = 'hello';
var Test = 'world';
console.log(test) // hello;
- 2.标识符
2.1 组成必须是数字,字母,下划线以及$,且不能以数字开头;
2.2 标识符不能是关键字,保留字、true|false或者undefined,null;
2.3 遵循驼峰命名规范
关键字/保留字
类型
在编程语言中能够表示并操作的值的类型称做数据类型
js中的数据类型分为两类:
原始类型:数字、字符串、布尔值、null(空)、undefined(未定义)
对象数据类型:数组、函数、Date、RegExp、Error
Symbol
- 3.变量 提升
变量:将数据存储起来以备将来使用的量;
声明变量:var 无块级作用域,可以重复声明,可以改变值;
const有块级作用域,不可以重复声明,不可以改变值
let有块级作用域,不可以重复声明,可以改变值
var进行变量提升,而let和const不进行变量提升
运算符/操作符
操作符和运算符
- delete操作符
- ,号操作符
- in操作符
运算符:
- 一元运算符
只能操作一个数的运算符;
- 算数运算符
+ 拼接和求和 对于非数字类型优先执行拼接
- 相减 会先转化为数字类型,然后再取差
*
/ infinity
%
isNaN
++
--
- 关系运算符
如果两个数都是string,则比较第一个字母的ASCII码;
如果两个都是数字,比较数值
如果一个数值一个字符串,则把字符串准换为数字,再比较
- 逻辑运算符
&& 第一个为真,返回第二个
|| 第一个为假,返回第二个
! 如果表达式为真,则返回true
语法
语句
对象
1.语法和数据类型
- 区分大小写
- 注释
- 关键字和保留字
- 标识符
- 变量
- 数据类型
- 数据类型检测
2.操作符和运算符
- delete操作符
- ,号操作符
- in操作符
运算符:
3.表达式和运算符
什么是表达式
表达式相当于短语,最简单的表达式是字面量或者变量名;
单一的字面量和组合的字面量都可以称之为表达式
一元运算符
只能操作一个值的运算符;
1.递增++和递减--;
前置递增/递减和后置递增/递减的区别
在没有赋值操作,前置和后置都是一样的
在赋值操作时,如果递增或递减运算符前置,那么前置的运算符会先累加或累减再赋值;如果递增或者递减运算符后置则先赋值然后再累加或者累减;
++对数值字符串有一个隐含的转型功能,var box = "1";box++ ---2;而box+1 = "11";
+&-运算符;
敲一笔例子;
关系运算符
什么是关系运算符
用于进行比较的运算符称为关系运算符;大于(>),小于(<),等于(==),大于等于(>=)小于等于(<=);不等于(!=)全等(===)不全等(!==);
比较的运算法则
如果两个都是Number类型,则互相比较;
如果两个都是数值字符串则比较第一位字符;
如果两个都是字符串类型,则比较ASCII编码;
如果有一个是字符串数值类型,则转为数值然后比较;
如果有一个是对象,则调用toString或Valueof;
在相等和不等的比较上,如果操作数是非数值,则遵循以下规则
一个操作数是布尔值,则比较之前将其准换为数值,false转0,true转为1;
一个操作数是字符串,则比较之前将其准换为数值再比较;
一个操作数是对象,则先调用valueOf()或者toStirng()方法后在和返回值做比较
不需要任何转换的情况下,null和undefined是相等的;
一个操作数是NaN,则==返回false !=返回true;并且NaN和自身不等;
两个操作数都是对象,则比较他们是否是同一个对象,如果都指向同一个对象则返回true;
在全等和不等的判断上,只有值和类型都想等,才返回true;
**注意undefined在比较时不会自动准换,而字符串可以;
- 一元运算符
只能操作一个数的运算符;
- 算数运算符
+ 拼接和求和 对于非数字类型优先执行拼接
- 相减 会先转化为数字类型,然后再取差
*
/ infinity
%
isNaN
++
--
- 关系运算符
如果两个数都是string,则比较第一个字母的ASCII码;
如果两个都是数字,比较数值
如果一个数值一个字符串,则把字符串准换为数字,再比较
- 逻辑运算符
&& 第一个为真,返回第二个
|| 第一个为假,返回第二个
! 如果表达式为真,则返回true
3.表达式和语句
- 表达式
- 控制语句和错误调试
- 循环和迭代
4.函数
- 函数的作用
- 便于复用
- 可维护性强
- 使程序变得简短清晰,提高可读性;
- 定义函数的两种方式:
1.定义一个函数(定义和声明同时进行)
function show(){
}
2.函数表达式
var show = function(){
}
3..函数声明提升
声明一个函数:声明和定义同时完成;并且会提升到当前作用域的顶部;
4..形参和实参
*默认参数
- b = b||5
- es6 function(b=5,c=3);
var a = 1 ;
function show(a){
console.log(a); //1
}
a = 1
function show(a){
consoe.log(a) //undefined;
}
show();
-------------------
区分两次执行的不同并说明原因:
function outer(a){
a = a||1;
console.log(a);
show();
}
function show(){
alert(a);
}
outer()
----------
function outer(a){
a = a||1;
console.log(a);
function show(){
alert(a);
}
show();
}
outer()
原因:作用域链
5...匿名函数
6.自执行函数
7...嵌套函数
...箭头函数
箭头函数是函数的简写形式
表达式:
(a,b)=>{
return
}
箭头函数的简写形式
- 简写条件
- 只有一个参数,则可以去掉括号
- {}里只有一个ruturn语句,则可以省略return和{};
eg: let arr1 = [91,72,65,56,89];
let arr2.map((item)=>{
if(item>=60){
return true;
}else{
return false;
}
})
简写:
let arr2.map(item=>item>=60;)
8..函数递归
- 找出相邻两个函数的关系
- 确定临界值
- 实现阶乘
fn(n) = fn(n-1)*n
if(n==1){
}
- 实现100以内的加法
fn(n) = fn(n-1)+n;
if(n=1){
return 1
}
9.匿名函数
10.闭包
函数运行在定义他们的作用域中,而不是在函数运行的作用域中,只要f定义在F中,它的作用域就会保留下来,即使F已经执行完成;但是只有返回f才可以访问这个作用域;
--- 6.数组
-
- 三大排序思想;
--- 7.字符串
-创建函数的三种方式
- new String();
- String()
- var a = "string";
- 字符串拼接
- "string"+a;
- 字符串模版 a+${a};
-
--- Date Math 和正则表达式
常用Math
Math.pow(3,2) //9 3的二次方
Math.round(3.4) //3 四舍五入运算
Math.max(1,10,9,7,5,3) //10 返回最大值
Math.min() //返回最小值
Math.floor() //向下取整
Math.ceil() //向上取整
Math.random() //随机生成一个数
Date
Date常用之获取本地时间
function format(){
const time = new Date();
const year = time.getFullYear();
let m = time.getMonth()+1;
let month = Zero(m);
let d = time.getDate();
let day = Zero(d);
const w = time.getDay();
var str = "日一二三四五六",week = str.charAt(w);
const hour = time.getHours();
const minutes = time.getMinutes();
const seconds = time.getSeconds();
return `${year}年${month}月${day}日 周${week} ${hour}点${minutes}分${seconds}秒`
}
// 补零函数
function Zero(value){
return value<10?"0"+value:value;
}
const localTime = format();
console.log(localTime)
Date常用之获取两个时间的差值
function getSpanTime() {
const nowTime = new Date();
const targetTime = new Date("2018/7/12 23:59:59");
//此处不能用“—”,因为ie6-8存在兼容性问题
const nowSpan = nowTime.getTime();
const tarSpan = targetTime.getTime();
const elapsed = tarSpan - nowSpan;
// console.log(elapsed)
const hours = Math.floor(elapsed/(1000*60*60));
let diffTime = elapsed - hours*1000*60*60;
const minutes = Math.floor(diffTime/(1000*60));
diffTime -= minutes*1000*60;
const seconds = Math.floor(diffTime/1000);
return Zero(hours)+"时"+Zero(minutes)+"分"+Zero(seconds)+"秒"
}
网友评论