zoukankan      html  css  js  c++  java
  • 【前端】JavaScript基础

    1 什么是js

    JavaScript是一种运行在浏览器中的解释型的编程语言

    1.1 js引用

    使用<script></script>标签

    <script src="public.js" type="text/javascript"></script> 或直接写js代码

    • head中引用
    • body中引用

    1.2 body和head引入的区别

    html代码从上而下解析,如果在head中引入JS,影响页面打开的速度,存在风险,所以通常放在html body的最下方,这样页面内容先展示,最后在加载JS。

    1.3 注释与变量

    单行注释通过 //  多行注释通过 /* */

    1 name = 'dsx'; // 默认全局变量 
    2 function func() {
    3     var name = 'niulaoshi'; // var 局部变量 
    4 }

    2 字符串

     1 //定义字符串 
     2 var str = '你开心就好!'; 
     3 var name = '大师兄'; 
     4 // 字符串的拼接 
     5 var name_str = name+str;  
     6 //字符串操作 
     7 str = '大师兄' 
     8 str.charAt(0) 根据角标获取字符串中的某一个字符  char字符 
     9 str.substring(1,3) 根据角标获取 字符串子序列 大于等于x小于y 
    10 str.length 获取字符串长度 
    11 str.concat('牛教授')  拼接字符串 
    12 str.indexOf('大师') 获取子序列的位置 
    13 str.slice(0,1)  切片 start end start<=取值<end 同python
    14 str.toLowerCase()  变更为小写 
    15 str.toUpperCase() 变更大写 
    16 str.split('师',1) 切片 返回数组 参数2为取分割后数组的前x个元素
    17  
    18 //数字类型(JavaScript 只有一种数字类型。数字可以带小数点,也可以不带)
    19  
    20 var age = 18;
    21 var score = 89.22; 
    22 number = '18'; 
    23 // 字符串转,如是小数,则会去掉小数部分
    24 var n = parseInt(number); 
    25 // 转换成小数 
    26 f =parseFloat(number);
    27 //布尔类型(true 或 false)
    28 var t = true; 
    29 var f = false;

    3 数组(python中的列表)

     1 // 第一种创建方式 var list = new Array(); 
     2 list[0] = '大师兄'; 
     3 list[1] = '牛教授'; 
     4  
     5 // 第二种创建方式 
     6 var list2 = new Array('大师兄','牛教授'); 
     7  
     8 // 第三种创建方式 
     9 var list3 = ['大师兄','牛教授']; 
    10  
    11 //数组操作 
    12 var list3 = ['大师兄','牛教授'];
    13  
    14 list3.length //数组的长度 
    15  
    16 list3.push('dsx') //尾部追啊参数 
    17  
    18 list3.shift() //头部获取一个元素 并删除该元素 
    19  
    20 list3.pop() //尾部获取一个元素 并删除该元素 
    21  
    22 list3.unshift('dsx') //头部插入一个数据 
    23  
    24 list3.splice(start, deleteCount, value) //插入、删除或替换数组的元素 
    25  
    26 list3.splice(n,0,val) //指定位置插入元素 
    27  
    28 list3.splice(n,1,val) //指定位置替换元素 
    29  
    30 list3.splice(n,1) //指定位置删除元素 
    31  
    32 list3.slice(1,2) //切片;
    33  
    34 list3.reverse() //反转 
    35  
    36 list3.join('-') //将数组根据分割符拼接成字符串 
    37  
    38 list3.concat(['abc']) //数组与数组拼接 
    39  
    40 list3.sort() //排序

    4 对象类型(Python中的字典)

    1 var dict = {name:'dsx',age:18,sex:'男' };
    2 var age = dict.age; 
    3 var name = dict['name'];
    4 delete dict['name'] //删除
    5 delete dict.age //删除

    5 条件判断

    • javascript当中如果是两个等号,代表不去校验数据类型是否相同.三个等号会判断数据类型
    ‘1’==1为真,而'1'===1为假
     1 if (条件) {
     2     执行代码块
     3 } else if (条件) {
     4     执行代码块
     5 } else {
     6     执行代码块
     7 };
     8  
     9 if (1 == 1) {
    10     console.log()
    11 } else if (1 != 1) {
    12     console.log()
    13 } else if (1 === 1) {
    14     console.log()
    15 } else if (1 !== 1) {
    16     console.log()
    17 } else if (1 == 1 && 2 == 2) { //and
    18     console.log()
    19 } else if (1 == 1 || 2 == 2) { //or
    20     console.log()
    21 }
    22  
    23 switch (a) {
    24     case 1:
    25         console.log(111);
    26         break;
    27     case 2:
    28         console.log(222);
    29         break;
    30     default:
    31         console.log(333)
    32 }

    6 循环

     1 //第一种循环
     2 //循环的是角标
     3 //字符串:循环角标、数组:循环角标、字典:循环Key
     4 tmp = ['宝马', '奔驰', '尼桑'];
     5 tmp = '宝马奔驰尼桑';
     6 tmp = {'宝马': 'BMW', '奔驰': 'BC'};
     7 for (var i in tmp) {
     8     console.log(tmp[i])
     9 }
    10 
    11 //第二种循环
    12 //不支持字典的循环
    13 for (var i = 0; i < 10; i++) {
    14     console.log(tmp[i])
    15 }
    16 
    17 //第三种循环
    18 while (1 == 1) {
    19     console.log(111)
    20 }

    7 函数定义

     1 //1、普通函数
     2 function 函数名(形参, 形参, 形参) {
     3     执行代码块
     4 }
     5 函数名(形参, 形参, 形参);
     6  
     7 //2、匿名函数 匿名函数没有名字,无法调用时找到,将整个函数当做一个参数传递
     8 setInterval(function () {
     9     console.log(11)
    10 }, 5000);
    11 
    12 //3、自执行函数创建函数并且自动执行
    13 当引入多个js文件时,函数名可能会出现重复,这时通过自执行函数,保证每一个js文件都会被解析,从而生成独立的容器,防止调用冲突
    14 (function (name) {
    15     console.log(name)
    16 })('dsx');
     1 //作用域
     2 //1.Python的作用域是以函数作为作用域的,其他语言以代码块({})作为作用域的。
     3 //JavaScript是以函数作为作用域
     4 function tmp() {
     5     var name = 'dsx';
     6     console.log(name)
     7 }
     8 tmp();
     9 console.log(name);
    10 
    11 /*
    12 运行结果:
    13 dsx
    14 name is not defined
    15 */
     1 //2.函数作用域在函数未被调用之前,已经创建
     2 var name = 'nhy';
     3 function a() {
     4     var name='dsx';
     5     function b() {
     6         console.log(name);
     7     }
     8     return b
     9 }
    10 var c = a();
    11 c();
    12 /*
    13 运行结果:
    14 dsx
    15 */

    由于函数创建时,作用域已经创建,因此最后的作用域结果入上图。c=b。因此执行b()函数,当然首先查找到本层函数的变量name='dsx' 。

     1 //3.函数的作用域存在作用域链(代码不执行时,先生成作用域链)
     2 //当函数嵌套函数时,每一个函数为一个作用域,多层就叫做作用域链,查找遵循作用域链规则
     3 function outer() {
     4     name = 'nn';
     5     function inner() {
     6         var name = 'ii'
     7         console.log('in', name)
     8     }
     9  
    10     console.log('out', name);
    11     inner()
    12 }
    13 outer();
    14 /*
    15 运行结果:
    16 out nn
    17 in ii
    18 */
    19 //函数不调用时,只生成作用域,当调用时遵循作用域链执行,name已被重置为hhh,如下图
    20 function outer() {
    21     var name = 'nn';
    22     function inner() {
    23         console.log('in', name)
    24     }
    25  
    26     var name = 'hhh';
    27     console.log('out', name);
    28     inner()
    29 }
    30 outer();
    31 /*
    32 运行结果:
    33 out hh
    34 in hh
    35 */

     1 //4.函数内,局部变量提前声明 JavaScript函数在运行前会找到函数内的所有局部变量执行声明
     2 var name = 'xxx';
     3 function func() {
     4     console.log(name);
     5     var name = 'dsx';
     6 }
     7 func();
     8 /*
     9 运行结果:
    10 undefined
    11 */

    上面的代码同下面↓

    1 var name = 'xxx';
    2 function func() {
    3     var name;//js编译器在执行func函数时,会把它body里面的变量提前到最前面进行声明!
    4     console.log(name);
    5     var name = 'dsx';
    6 }
    7 func();

    8 面向对象

     1 // 在JavaScript中,方法和类写法类似,区别方式为是否有this,如果有就可以当做是类来用 
     2 // JavaScript的类默认就拥有了Python的构造函数__init__
     3 function Foo(name) {
     4     this.name = name;
     5 }
     6 // 创建对象时JavaScript需要用到new关键字来创建对象 
     7 var obj = new Foo('dsx');
     8 console.log(obj.name);
     9  
    10 // 类中定义方法,虽然可以用,但是在多个实例时存在重复实例方法,浪费资源。
    11 // 不同对象的say函数是两个不同的函数,虽然函数名称和代码都是相同的。每次创建对象,都会创建一个say的方法。 
    12 function Foo1(name) {
    13     this.name = name;
    14     this.say = function () {
    15         console.log(this.name)
    16     }
    17 }
    18 var obj1 = new Foo1('dsx_obj1');
    19 obj1.say();
    20 // 完善类的定义 
    21 function Foo2(name) {
    22     this.name = name
    23 }
    24 // 类的原型,将共用的的方法抽出来,当在实例化后,只创建了一个叫做Foo2的对象,对象内只有name
    25 //在调用方法时去现在Foo中找,没有找到,会在去原型中找
    26 //是否有该方法。有执行,没有就报错 
    27 Foo2.prototype = {
    28     say: function () {
    29         console.log(this.name)
    30     }
    31 };
    32 var obj2 = new Foo2('dsx_obj2');
    33 obj2.say();

    9 序列化与反序列化

     1 //序列化
     2 var xiaoming = {
     3     name: '小明',
     4     age: 14,
     5     gender: true,
     6     height: 1.65,
     7     grade: null,
     8     'middle-school': '"W3C" Middle School',
     9     skills: ['JavaScript', 'Java', 'Python', 'Lisp']
    10 };
    11 var s = JSON.stringify(xiaoming);//列化成JSON格式
    12 console.log(s);
    13 //反序列化
    14 var t = JSON.parse(s)//把JSON格式字符串转换成JavaScript对象
    15 console.log(t)
     1 //序列化
     2 //第三个参数:要输出得好看一些,可以加上参数,按缩进输出:
     3 JSON.stringify(xiaoming, null, '  ');
     4 //第二个参数:用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array:
     5 JSON.stringify(xiaoming, ['name', 'skills'], '  ');
     6 //还可以传入一个函数,这样对象的每个键值对都会被函数先处理:
     7 function convert(key, value) {
     8     if (typeof value === 'string') {
     9         return value.toUpperCase();
    10     }
    11     return value;
    12 }
    13 
    14 JSON.stringify(xiaoming, convert, '  ');
    15 //如果我们还想要精确控制如何序列化小明,可以给xiaoming定义一个toJSON()的方法,直接返回JSON应该序列化的数据:
    16 var xiaoming = {
    17     name: '小明',
    18     age: 14,
    19     gender: true,
    20     height: 1.65,
    21     grade: null,
    22     'middle-school': '"W3C" Middle School',
    23     skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
    24     toJSON: function () {
    25         return { // 只输出name和age,并且改变了key:
    26             'Name': this.name,
    27             'Age': this.age
    28         };
    29     }
    30 };
    31 
    32 JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'

    10 URI转义

     

  • 相关阅读:
    双链表
    单链表
    二叉树的遍历
    leetcode-9. 回文数
    leetcode-8. 字符串转换整数 (atoi)
    leetcode-7. 整数反转
    leetcode-6. Z 字形变换
    leetcode-5. 最长回文子串
    manacher-线性查找算法-(最长回文子串问题)
    bfprt-线性查找算法-(topK问题)
  • 原文地址:https://www.cnblogs.com/momolei/p/9835340.html
Copyright © 2011-2022 走看看