运算符
+ 数学运算 字符串拼接
var c = 1 + 1 + 'str' + ( 1 + 1 ) // 2str2
任何数值类型的值 + 字符串 都是字符串
/ 除法
var 10/2 //5
var 0/0 // NaN
NaN是Number类型
% 取模、取余
++、-- 自增、自减
a++ 和 ++a 的区别:a++自增前的值,++a是自增后的值,去参与运算
比较符号 > < >= <= == ===
==相等不看字符类型
===全等于要比较数字类型
NaN不与任何值相等,包括他自己
逻辑运算
&& 、 || 、 !
false、undefined、null、0、NaN、"" 假
除上述外都为真
&& 遇到真往后走,遇到假返回假,全为真返回最后一个
|| 遇到假往后走,遇到真返回真,全为假返回最后一个
循环
for(;i;)
for循环中间是判断语句,当i=0时,为false,终止循环
object对象
typeof()能打印出来的类型有: string、number 、Boolean、 undefined、 Object(引用类型 object、array)、function
null代表的是空指针(但其实这算是一个bug)
null代表的是空指针
typeof(typeof(1))// string
所有typeof的typeof都是string
NaN
意思是不是一个数字(not a number的缩写),NaN是一个警戒值,有特殊用途的常规值,用于指出数字类
型中的错误情况,即执行数学运算没有成功,这个是失败后返回的结果。
typeof(typeof(NaN))// number
类型转换(显示、隐式)
显示:
- Number() 转换成数字
- parseInt()转换成整型
parseInt('abc123') //NaN
parseInt('123abc') //123
parseInt('1abc23') //1
- parseFloat()
parseFloat('3.1415926').toFixed(2) //3.14
以二进制为基数转换成16进制
parseInt('100',2).toString(16) //4
- Boolean()
转换成布尔类型
隐式:
- a++;
会先NUmber(a) - *、/ 、- 、数字字符串之间比较('1'<'2')
都会先转换成Number - 'a'<'b'
先转成ascii码 - +'1'
会将字符类型转换成数字(Number()) - isNaN()
会先把里面数Number一下
undefined == null //true
undefined == 0 //false
null == 0 //false
函数基础与种类
编程原则:高内聚、低耦合 -> 模块的单一责任制
- 高内聚:内部代码联系度,相关性强
- 低耦合:抽象出重复的代码,单独成块
函数声明
function 函数名([参数]){ 执行的代码块... }
匿名函数表达式 - 函数字面量
var 函数名 = function([参数]){函数执行语句;}
函数名的命名规则
- 不能以数字开头
- 字母 _ $ 数字
- 小驼峰命名法(根据公司规范)
形实参及映射
点击查看代码
var aa = 1,bb=3;
//形参:占位用
var test = function(a,b){
console.log(a,b);
}
//实参:实际参数,给形参赋值
test(aa,bb)
形参和实参(arguments)个数可以不同
点击查看代码
//形参:占位用
var test = function (a, b) {
console.log(arguments);
//arguments代表的是实参
}
//实参:实际参数,给形参赋值
test(1, 2, 3)
点击查看代码
var test = function (a, b) {
a = 3
console.log(arguments); // [3]
}
//实参:实际参数,给形参赋值
test(1)
a 和 arguments[0]是两个东西,但是他们有映射关系
点击查看代码
var test = function (a, b) {
b = 3
console.log(arguments); // [1,undefined]
}
//实参:实际参数,给形参赋值
test(1)
每个函数都要返回,有些没有声明的函数,会隐式返回,添加return;
---return 的作用
- 终止函数的执行
- 返回一个值
函数参数默认值
es5的版本不能直接给形参赋值
点击查看代码
function test(a = 2, b) {
console.log(a, b); //3,undefined
}
test(3)
function test(a = 2, b) {
console.log(a, b); //2,3
}
test(undefined, 3)
作业:
阶乘:
点击查看代码
function jc(n) {
if (n)
return n * jc(n - 1);
return 1;
}
console.log(jc(4));
斐波拉契:
点击查看代码
function fabonacci(a, b, n) {
if (n <= 2)
return a;
return fabonacci(a + b, a, n - 1)
}
console.log(fabonacci(1, 1, 10));