JavaScript数据结构与算法(1)--------JavaScript基础

​ 时间过得可真是快啊,总是不经意间敲打你一下,让你知道居然已经过了这么久了。现在临近年末,仔细一想,居然已经大学毕业小半年了,更过分的是参加工作居然已经一年了!!一想到这一年前半年基本都是在学校忙着搞毕业设计,毕业后就被派到成都去出差了,忙个半死。一年下来,除了感觉身体似乎变差,找到一个女朋友以外,就是惊叹自己专业方面居然没有一点进步。于是最近久想继续学习一下。至于为什么要从算法方面开始,一方面公司里的工作大多数是和JavaScript打交道,另一个方面是公司有一套自有框架,再学新框架暂时也用不到,还不如精进现在已经学到的,使用算法提高自己现在解决问题的效率,所以就准备从算法入手,从JavaScript基础开始再学习一遍。


  1. JavaScript变量

    ​ JavaScript变量类型有数字字符(串)布尔值函数对象nullundefined数组日期正则表达式。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
  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就是一个未定义的变量。

  3. 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取反
    

    以上是逻辑运算符。还有一个位运算符不怎么常用。

  4. 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

  5. JavaScript中的==和===

    ​ ==和==都是判断两边的值是都相等的运算符,使用==时如果双方类型不同,但是值相同的话会返回true,使用===时只要类型不相同时就会返回false。

    console.log(false == 0)          // 1
    console.log(false === 0)     // 2
    

    ​ 运行代码后为:

    true

    false

    ​ 这是因为// 1在比较前会将false转换为0,所以在比较时会返回true,而// 2会因为类型不相同而直接返回false。事实上,使用弱等于的话,在判断前都会进行一次类型转换,一下表格展示不同类型变量在弱等于比较时进行的判断时进行的类型转换。

    类型 转换用的方法
    字符 toNumber
    布尔 toNumber
    对象 toPrimitive
  6. 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...方便的多。

  7. JavaScript循环

    ​ JavaScript中的循环和其他语言的循环都是一样的,for循环、while循环、do...while循环。

    ​ 其中for循环是设定一个计数值,然后再设置循环条件,然后改变计数值。for(var i = 0; i < 10 ;i++)

    ​ while循环是如果满足条件的情况下就会执行代码,直至不满足循环条件。while(i < 10)

    ​ do...while循环是先执行代码,然后再判断是否满足条件,如果满足条件就执行do下边的代码,如果不满足就直接跳过。

  8. 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())                      // 调用函数,直接将返回值打印出来
    
  9. 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"
    

以上。

才疏学浅。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349