前端知识——JavaScript基础& ECMAScript语言语法

JavaScript基础

概念

JavaScript是一门客户端脚本语言

  • 运行在客户端浏览器中的,每一个浏览器都有JavaScript的解析引擎
  • JavaScript语言不需要进行编译解释就可以运行

功能

  • 可以来增强用户和Html页面的交互,可以来控制Html元素,让页面有一些动态的效果。可以增强用户体验

  • JavaScript = ECMAScript+JavaScript 自己特有的BOM+DOM

语法

ECMAScript 客户端脚本语言的标准

基本语法:

  1. 与html结合方式
    1. 内部JS
      • 定义<script>,标签提内容就是js代码
  <script>
        alert('hello world')
    </script>
2. 外部JS 
    * 定义<script> 通过src属性引入外部的js文件
    <script src="js/a.js"></script>

  1. 注释

    1. 单行注释://注释内容
    2. 多行注释:/*注释内容*/
  2. 数据类型

    1. 原始数据类型(基本数据类型):
      1. number:数字。 整数/小数/Nan(Not a Number 一个不是数字的数字类型)
      2. string 字符串。 字符/字符串 在JavaScript中没有字符的概念,使用单引号和双引号定义的都为字符串
      3. boolean true和false
      4. null:一个对象为空的占位符
      5. undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
    2. 引用数据类型:对象
  3. 变量

    • 变量:一小块存储数据的内存空间
    • JavaScript是弱类型的语言
    • 语法 var 变量名 = 初始化值
  4. 运算符

    1. 一元运算符:只有一个运算数的运算符
    2. 算术运算符
    3. 赋值运算符
    4. 比较运算符
      • 比较方式
      • 类型相同
        • 字符串:按照字符串的字典顺序进行比较。按位逐一比较,直到得出大小为止
      • 类型不同
        类型不同会进行类型转换
        • === 全等于 在比较之前 先判断类型,如果类型不一样则直接返回false
    5. 逻辑运算符
    • &&(具有短路效果) ||(具有短路效果)
    • ! 非

其它类型转boolean规则
1. number:0或NAN为假 非0为真
var flag = 3; document.write(!flag);
上面的代码 输出为false 是因为 3非0 转为boolean 为true 非 为false
2. string: 除了空字符串("") 其他都是true
3. null&&undefined 转化为false
4. 对象 所有对象都转换为true

var obj = null;
if(obj){
  alert(123);
}

上面的代码可以防止空指针异常,是因为if的条件要求是boolean类型的 而null和undefined转换为boolean为false 所以可以防止空指针异常

  1. 三元运算符
    var c = a>b? 1:0
    • 语法
      • 表达式? 值1:值2
      • 判断表达式的值,如果是true则取值1,如果是false取值2
  2. 特殊语法
    • JS中语句以;结尾,如果一行只有一条语句则;可以省略
    • 变量的定义使用var关键字,也可以不使用
      • 用var修饰:定义的变量是局部变量
      • 不用var修饰:定义的变量是全局变量
  3. 流程控制语句
    1. if...else
    2. switch
      • 在js中,switch语句可以接收任意原始数据类型
    3. while
    4. do...while
    5. for

基本对象

Function: 描述或者方法的对象
  1. 创建
    1. var fun = new Function(形式参数列表,方法体)[不常用]
    2. function 方法名(形参列表){
      //方法体
      }
    3. var fun = function(a,b){
      //方法体
      }
  2. 方法
  3. 属性
    function中是有属性的
  • length: 形参个数
   function add(a, b) {
            alert(a+b);
        }
        // add(3,4)
        alert(add.length);
  1. 特点
    1. 方法定义时,形参的类型不用写
    2. 方法是一个对象,如果定义多个相同名称的方法,后面定义的会覆盖前面定义的
    3. 在JS中,方法的调用只与方法的名称有关,和参数列表无关
    4. 在方法声明中有一个隐藏的内置对象(数组形式)arguments,它封装了所有的实际参数,所以通过arguments可以获取到所有的参数
    /*
        * 求任意个数的和
        * */
        function add() {
            var sum = 0;
            for (var i = 0; i < arguments.length; i++) {
                sum += arguments[i];
            }

            alert(sum);

        }

        add(1,2,3,4,5,6,7,8,9,10);
  1. 调用
    方法名称(实际调用参数)
Array
  1. 创建
    1. var arr = new Array(数组元素列表);
//创建方式1
        var arr1 = new Array(1,2,3);
  1. var arr = new Array(数组默认长度);
        //创建方式2
        var arr2 = new Array(5);
  1. var arr = [元素列表];
//创建方式3
        var arr3 = [1,2,3,4,5];
  1. 方法
  • concat() 连接两个或更多的数组 并返回结果
var arr = [1,2,3];
        var arrConn = ['a','b','c'];
        var concat = arr.concat(arrConn);
        document.write(concat+"<br/>");
> 输出
1,2,3,a,b,c

  • join(参数) 将数组中的元素按照指定的分隔符拼接为字符串
var arr = [1,1.5,true,'asda'];
        document.write(arr.join("!"));
> 输出
1!1.5!true!asda 
  • push(参数) 向数组的末尾添加一个或更多的元素,并返回新的长度
var arr = [1,1.5,true,'asda'];
        var arrPush = [1,2,3,4,5];
        var arr_length = arr.push(arrPush);
        document.write(arr+"<br/>");
        document.write("push length" + arr_length);
> 输出
1,1.5,true,asda,1,2,3,4,5
push length5 
  • pop() 删除并返回数组的最后一个元素
var arrConn = ['a', 'b', 'c'];
        var popEl = arrConn.pop();
        document.write(popEl + "<br/>");
> 输出
c
  • shift() 删除并返回数组的第一个元素
var arrConn = ['a', 'b', 'c'];
var popEl = arrConn.shift();
  • unshift() 向数组的开头添加一个或更多元素,并返回新的长度

  • slice() 从某个已有的数组返回选定的元素
    参数:1. start 开始选取的数组下标,如果为负数 代表从尾部开始算起
    2.end 结束(不包头包尾)

var sliceArr = arrConn.slice(0,2);
        document.write(sliceArr+"<br/>");
  • sort() 对数组元素进行排序
  • splice() 删除元素,并向数组添加新元素
    参数:
    1. index 添加/删除元素的位置,负数表示从结尾处开始
    2. howmany 要删除的元素数量
    3. 向数组添加的新元素
      (包括index位置的元素)
      返回值
      包含被删除项目的数组
var spliceArr = [1,2,3,4,5];
        var spArr = spliceArr.splice(0,2,'a','b');
        document.write(spArr+"<br/>");
        document.write(spliceArr+"<br/>");
> 输出
1,2
a,b,3,4,5
  • reverse() 翻转数组
var spliceArr = [1,2,3,4,5];
        var reverArr = spliceArr.reverse();
        document.write(reverArr+"<br/>");
  • toString() 把数组转换为字符串,并返回结果
  1. 属性
    1. length 数组的长度
  2. 特点
    1. JS中数组中元素的类型是可变的
       var arr2 = [1,'abc',true];
2. JS中数组的长度是可变的
Boolean
Date
  1. 创建
    var date = new Data()
  2. 方法
  • toLocaleString() 返回当前date对象对应的时间本地字符串格式
  • getTime() 获取当前时间的日期对象描述的时间到1970年1月1日的毫秒值
Math
  1. 创建

Math对象不需要创建可以直接使用
Math.方法名()

  1. 方法

    1. random() 产生一个0-1之间的随机数 [包含0不包含1]
    2. round(x) 把书四舍五入为最接近的整数
    3. ceil(x) 对数进行向上舍入
    4. floor(x) 对数进行向下舍入
  2. 属性

    1. PI 圆周率
Number
String
RegExp 正则表达式对象
  1. 正则表达式

    1. 单个字符:[]

    [a]:代表单个字符a
    [ab]: 代表单个字符a或b
    [a-z] 代表字母a-z单个字符

    • 特殊符号代表特殊含义的单个字符:
      • \d:单个数字字符[0-9]
      • \w: 单个单词字符[a-zA-Z0-9]
    1. 量词符号
      ?: 表示出现0次或1次
      *: 表示出现0次或多次
      +: 表示出现1次或多次
      {m,n}: 表示 m<=数量<=n
      * m如果缺省: {,n} 表示最多n次
      * n如果缺省:{m,} 最少m次
    2. 开始结束符
      • ^ 表示开始 /^w 表示以字母开头
      • $ 表示结尾
    3. 正则对象
      1. 创建
        1. var reg = new RegExp("正则表达式");
        2. var reg = /正则表达式/
      var reg = new RegExp("\w{6,12}");
      //创建2
      var reg2 = /w{6,12}/;
      
      1. 方法
        1. test():验证 指定的字符串是否符合正则定义的规范
       var username = "zhangsan";
       var flag = reg.test(username);
      
Global 全局函数
  1. 特点:
    全局对象,Global中封装的方法不需要对象就可以直接调用:方法名();
  2. 方法:
    • encodeURI():url编码 只编码汉子
    • decodeURI():url解码
    • encodeURIComponent() url编码 编码的字符更多 有些符号也参与编码
    • decodeURIComponent() url解码
        /*编码*/
        var str = "奶糖与卤蛋";
        var encodeURI = encodeURI(str);
        document.write(encodeURI + "<br/>");
        /*解码*/
        var decodeStr = decodeURI("%E5%A5%B6%E7%B3%96%E4%B8%8E%E5%8D%A4%E8%9B%8B");
        document.write(decodeStr)
* parseInt():将字符串转为数字
    * 特点:逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number
* isNaN():判断一个变量是否是NaN
    * NaN参与的==比较全部为false 所以需要使用函数来进行判断
 var a = NaN;
    document.write(a == NaN+"<br/>");
    document.write(isNaN(a));
> 输出 
false
true
  • eval() 将JavaScript字符串,转成脚本来执行
 var jscode = "alert(123)"
 eval(jscode);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容