• js学习(5)语法专题


    Js是一种动态类型语言,变量没有类型限制,可以随时赋值

    强制转换:

    主要指使用Number(),String()和Boolean()三个函数,手动将各个类型的值,分别转换为数字,字符串或布尔值

    Number函数

    1.传入原始类型值,只要有一个字符无法转换为数值,就不能转换,比parseInt要严格得多

    空字符串转换为0  true :1     false: 0    null:0

    2.传入对象

    参数是对象时,将返回NaN,除非是包含单个数值的数组

    String函数

    数值:字符串

    字符串:不变

    布尔值:true:“true”      false:“false”

    undefined:“undefined”
    null:“null”

    如果传入参数是对象,返回一个类型字符串,如果时数组,返回该数组的字符串形式

    String({a: 1}) // "[object Object]"
    String([1, 2, 3]) // "1,2,3"
    

    内部先执行toString 之后才尝试  valueOf方法  与Numbe相反

    Boolean函数

    除了undefined,null,-0,+0,NaN,' '(空字符串)转换为false,其他均为true

    自动转换

    以强制转换为基础

    有三种情况,Js自动转换数据类型,即转换自动完成,用户不可见

    1.不同类型数据互相运算

    2.对非布尔值类型的数据求布尔值

    3.对非数值类型的值使用一元运算符(+和-)

    规则为预期是什么类型的值就调用该类型的转换函数

    如果某位置既可以是字符串又可以是数值,那么默认转为数值

    字符串的自动转换主要发生在字符串的加法运算时,其他一般转为数值

    一元运算符也会把运算字转为数值

    +'abc' // NaN
    -'abc' // NaN
    +true // 1
    -false // 0
    

     

     

    错误处理机制  

    1.Error实例对象

    Js原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例

    var err = new Error('出错了');
    err.message // "出错了"
    

    可以通过message属性读到错误信息

    大多数js引擎,对Error实例还提供name和stack属性,分别表示错误的名称和错误的堆栈

    但不是每种实现都有

    2.原生错误类型

    Error实例对象是最一般的错误类型,js还派生出了6个对象

    (1).SyntaxError对象

    解析代码时发生的语法错误

    (2).ReferenceError对象

    引用一个不存在的变量时发生的错误

    将一个值分配给无法分配的对象,比如对函数的运行结果或者this赋值

    (3).RangeError对象

    值超出有效范围

    (4)TypeError对象

    变量或参数不是预期类型

    如对字符串,布尔值,数值等原始类型用new命令

    (5).URIError对象

    对URI相关函数的参数不正确

    encodeURI(),decodeURI(),encodeURIComponent(),decodeURIComponent(),escape(),unescape()

    (6).EvalError对象

    eval函数没有正确执行时

    都可以接收一个参数,代表错误提示信息

     

    自定义错误

    function UserError(message) {
      this.message = message || '默认信息';
      this.name = 'UserError';
    }
    
    UserError.prototype = new Error();
    UserError.prototype.constructor = UserError;
    
    
    new UserError('这是自定义的错误!');
    

      

    类似java 异常处理机制

    throw,try..catch,finally

    throw可以抛出任何类型的值,对于js引擎来说遇到throw语句,程序就终止了

    finally的执行顺序在return之前

    function f() {
      try {
        console.log(0);
        throw 'bug';
      } catch(e) {
        console.log(1);
        return true; // 这句原本会延迟到 finally 代码块结束再执行
        console.log(2); // 不会运行
      } finally {
        console.log(3);
        return false; // 这句会覆盖掉前面那句 return
        console.log(4); // 不会运行
      }
    
      console.log(5); // 不会运行
    }
    
    var result = f();
    // 0
    // 1
    // 3
    
    result
    // false


    try {
      try {
        cosnole.log('Hello world!'); // 报错
      }
      finally {
        console.log('Finally');
      }
      console.log('Will I run?');
    } catch(error) {
      console.error(error.message);
    }
    // Finally
    // cosnole is not defined  

    编程语法风格规范:

    不要用with,自增,自减少用,不要使用相等运算符,只用严格相等

    不要将不同目的的语句合并在一起

    switch  case结构可以用对象结构代替

    function doAction(action) {
      switch (action) {
        case 'hack':
          return 'hack';
          break;
        case 'slash':
          return 'slash';
          break;
        case 'run':
          return 'run';
          break;
        default:
          throw new Error('Invalid action.');
      }
    }
    换为:
    function doAction(action) {
      var actions = {
        'hack': function () {
          return 'hack';
        },
        'slash': function () {
          return 'slash';
        },
        'run': function () {
          return 'run';
        }
      };
    
      if (typeof actions[action] !== 'function') {
        throw new Error('Invalid action.');
      }
    
      return actions[action]();
    }
    

      

    console对象与控制台

    console对象是js的原生对象,可以输出信息到控制台

    常见用途:调试程序,提供一个命令行接口,用来与网页代码互动

    console.log():

    console.log('Hello World')
    // Hello World
    console.log('a', 'b', 'c')
    // a b c
    console.log(' %s + %s = %s', 1, 1, 2)
    //  1 + 1 = 2
    

    %s字符串    %d整数  %i整数  %f浮点数   %o对象的链接    %cCSS格式字符串

    使用%c占位符时,对应参数必须是CSS代码,用来对输出内容进行css渲染

    console.log(
      '%cThis text is styled!',
      'color: red; background: yellow; font-size: 24px;'
    )
    输出内容为黄底红字
    console.log(' %s + %s ', 1, 1, '= 2')
    // 1 + 1  = 2
    可以结合使用
    

    如果参数是一个对象,会显示该对象的值

    console.+其他:

    info是其别名,不过会在输出信息的前面加上一个蓝色图标

    debug默认不显示,只有在打开显示级别在verbose的情况下才会显示

    warn前面加上黄色三角,表示警告

    error加上红色的叉,表示出错,同时高亮显示输出文字和错误发生的堆栈

     

    console.table():

    对于某些复合类型的数据,console.table方法可以将其转为表格显示

    console.count():用于计数,输出它被调用了多少次

    该方法可以接受一个字符串作为参数,作为标签,对执行次数进行分类

    此外还有

    console.dir(),console.dirxml(),

    console.assert(),

    console.time(),console.timeEnd().

    console.group(),console.groupEnd(),console.groupCollapsed(),

    console.trace(),console.clear(),

    可以通过debugger设置断点  在此处打开源码界面

    for(var i = 0; i < 5; i++){
      console.log(i);
      if (i === 2) debugger;
    }

    其他:

    有关控制台命令行API

    用到的时候再查

     

      

      

      

  • 相关阅读:
    win10- *.msi 软件的安装,比如 SVN安装报2503,2502
    Java-byte[]与16进制字符串互转
    log4j 日志脱敏处理 + java properties文件加载
    CentOS7编译安装SVN(subversion1.9.7)
    Samba安装与配置
    php 实现redis发布订阅消息及时通讯
    PHP中使用ActiveMQ实现消息队列
    sphinx 配置文件全解析
    nginx和apache 配置
    php实现汉诺塔问题
  • 原文地址:https://www.cnblogs.com/wtblogwt/p/10040332.html
Copyright © 2020-2023  润新知