时间过得可真是快啊,总是不经意间敲打你一下,让你知道居然已经过了这么久了。现在临近年末,仔细一想,居然已经大学毕业小半年了,更过分的是参加工作居然已经一年了!!一想到这一年前半年基本都是在学校忙着搞毕业设计,毕业后就被派到成都去出差了,忙个半死。一年下来,除了感觉身体似乎变差,找到一个女朋友以外,就是惊叹自己专业方面居然没有一点进步。于是最近久想继续学习一下。至于为什么要从算法方面开始,一方面公司里的工作大多数是和JavaScript打交道,另一个方面是公司有一套自有框架,再学新框架暂时也用不到,还不如精进现在已经学到的,使用算法提高自己现在解决问题的效率,所以就准备从算法入手,从JavaScript基础开始再学习一遍。
-
JavaScript变量
JavaScript变量类型有数字、字符(串)、布尔值、函数、对象、null、undefined、数组、日期和正则表达式。JavaScript类型虽然也很多,但是JavaScript不是一个强类型的语言,不同于Java、C、C++等使用不同的关键字声明不同类型的变量,JavaScript只需使用var即可声明各种类型的变量。一下为声明各类型变量
var num = 1; // 1 num = 2; // 2 var name = `KuiSAhn`; // 3 var boo = true; // 4 var nullValue = null; // 5 var und; // 6
以上六行声明依次为数字,数字,字符串,布尔,null,undefined。
变量根据数据类型又可分为两大类:
- 原始数据类型:null、undefined、数字、字符串、布尔、Symbol
- 派生数据类型:JavaScript对象----数组、函数和正则表达式2
-
JavaScript变量作用域
JavaScript变量作用域指得是变量只有再当前作用域访问它 才可以正确的获得值,跳脱当前作用域后再获取这个值的话获取的就不是正确的值了。一下为例子
var x = "test1"; // 1 y = "test2"; // 2 function local(){ console.log(x); // 3 console.log(y); // 4 var z = "test3"; // 5 zz = "test4"; // 6 } function globl(){ console.log(x); // 7 console.log(zz); // 8 console.log(z); // 9 } local(); globl();
以上代码中,x和y是定义再最外边的,x相当于是全局变量,而y由于没有声明的关键字,所以它就是全局变量。而z和zz都是定义在函数local中,而这个函数local久相当于是一个作用域,但是zz没有关键字,所以它就是个全局变量。
字后打印出来的就是
test1
test2
test1
test4
40 Uncaught ReferenceError: z is not defined
函数global中要答应的z就会报错,再此时,z就是一个未定义的变量。
-
JavaScript运算符
JavaScript中的运算符可以分为算数运算符、赋值运算符、比较运算符、逻辑运算符和位运算符。
var num = 0; num = num + 2; // 加法 num = num * 3; // 乘法 num = num / 2; // 除法 num++; // 递增 num--; // 递减
以上就是算数运算符。
var num = 0; num += 1; // 加赋值==>num = num + 1 num -= 1; // 减赋值==>num = num - 1 num *= 2; // 乘赋值==>num = num * 2 num /= 1; // 除赋值==>num = num / 2 num %= 2; // 取余赋值==>num = num % 2
以上为赋值运算符
var a = 1,b = 2; b > a // 大于 b < a // 小于 b == a // 等于 b === a // 全等 b <= a // 小于等于 b >= a // 大于等于 b != a // 不等于
以上是比较运算符
x == 2 && y == 3 // 与 x == 5 || y == 6 // 或 !x // 非,x取反
以上是逻辑运算符。还有一个位运算符不怎么常用。
-
JavaScript中的真值和假值
JavaScript中不光布尔值有真假,其他的一些类型的值也是有值的
类型 转换成布尔值 null false undefined false 布尔值 true是true,false是false 数字 +0、-0、NaN是false,其他的都是true 字符串 长度为0时为false,长度大于1时为true 对象 对象都为true 可用一下代码检验
function testT(value){ if(value){ return true; }else { return false; } } console.log(`null为${testT(null)}`); console.log(`undefined为${testT(undefined)}`); console.log(`-0为${testT(-0)}`); console.log(`+0为${testT(+0)}`); console.log(`NaN为${testT(NaN)}`); console.log(`"test"为${testT("test")}`); console.log(`{"test":"test"}为${testT({"test":"test"})}`);
运行代码后为:
null为false
undefined为false
-0为false
+0为false
NaN为false
"test"为true
{"test":"test"}为true
-
JavaScript中的==和===
==和==都是判断两边的值是都相等的运算符,使用==时如果双方类型不同,但是值相同的话会返回true,使用===时只要类型不相同时就会返回false。
console.log(false == 0) // 1 console.log(false === 0) // 2
运行代码后为:
true
false
这是因为// 1在比较前会将false转换为0,所以在比较时会返回true,而// 2会因为类型不相同而直接返回false。事实上,使用弱等于的话,在判断前都会进行一次类型转换,一下表格展示不同类型变量在弱等于比较时进行的判断时进行的类型转换。
类型 转换用的方法 字符 toNumber
布尔 toNumber
对象 toPrimitive
-
JavaScript中的条件语句
JavaScript中常用的条件语句为if...else...和switch...case...。
其中if...else...在使用时的条件是if中的值当且仅当为真时才会执行,当if中的值为假时便会执行else下的代码。这样的条件语句也可以用三元运算符替换。
if(x === 0){ x++; }else { x--; } // 等价于 (x === 0) ? x++ : x--;
如果有多个判断条件,可以使用多个if...else...。
最后是switch...case...语句。
switch(x){ case 1: x += 1; break; case 2: x += 2; break; case 3: x += 3 break; } // 等价于if...else... if(x === 1){ x += 1; }else if(x === 2){ x += 2; }else if(x === 3){ x += 3; }
实际开发中if...else...比switch...case...用的更多,因为如果逻辑发生变化,修改if...else ...比switch...case...方便的多。
-
JavaScript循环
JavaScript中的循环和其他语言的循环都是一样的,for循环、while循环、do...while循环。
其中for循环是设定一个计数值,然后再设置循环条件,然后改变计数值。
for(var i = 0; i < 10 ;i++)
。 while循环是如果满足条件的情况下就会执行代码,直至不满足循环条件。
while(i < 10)
。 do...while循环是先执行代码,然后再判断是否满足条件,如果满足条件就执行do下边的代码,如果不满足就直接跳过。
-
JavaScript函数
JavaScript函数在实际开发中会大量应用。一下为简单的使用:
function fun1(){ // 定义函数 console.log("test"); } fun1() // 调用函数,终端打印test function fun2(text){ // 定义带参数的函数 console.log(text); } fun2("test") // 调用函数时传参数"test",终端打印test function fun3(){ // 定义一个有返回值得函数 return "test"; } console.log(fun3()) // 调用函数,直接将返回值打印出来
-
JavaScript面向对象编程
JavaScript的对象就是就是普通的键值对集合,所以声明JavaScript对象可以用一下集中方法
var obj = {}
、var obj = new Object()
。可以在定义对象时直接完成这个对象:
var obj = { "key1" : key1, key2 : key2 }
以上,JavaScript对象中的键就是对象的属性,值就是属性对应的值。
在面向对象编程中,对象是类的实例,一个类定义了对象的各种属性。
function people(name,sex,height,weight){ // 声明类 this.name = name; this.sex = sex; this.height = height; this.weight = weight; this.printName = function(){ // 声明的属性可以直接是函数 console.log(this.name); } } // 用下边这个代码实例化这个类,得到一个对象 var man = new people("kuisahn","male","180cm","70kg"); // 然后就可以修改这个对象了 man.name = "KVCION"; console.log(man.name); // 打印"KVCION" man.printName(); // 调用对象中的函数,打印"KVCION" // 设置对象中的函数也可以这样做 people.prototype.printSex = function (){ console.log(this.sex); } // 然后在实例中调用 man.printSex() // 调用刚刚定义的函数,打印"male"
以上。
才疏学浅。