美文网首页
52.3-JS标识符类型转换字符串和数值

52.3-JS标识符类型转换字符串和数值

作者: BeautifulSoulpy | 来源:发表于2020-05-12 11:16 被阅读0次

    清晨,是希望,是梦想,无论你此刻是否迷茫,在阳光升起的时候,请相信,努力的人最终都有回报,崭新的一天,愿你与美好不期而遇!早安!


    总结:

    1. JS中没有除零异常;因为它有正负无穷;

    1. 注释

    普通注释
    和C、Java一样

    // 单行注释
    /* 注释 */ 多行注释,也可以用在语句中
    str = 'hello' + /*comment*/' magedu'
    console.log(str)
    
    Python
    使用 # 作为单行注释,使用三引号""" """ 作为多行注释。
    

    文件注释

    文件注释位于文件的最前面,应包括文件的以下信息:概要说明及版本(必须),项目地址(开源组件必须),版权声明(必须)开源协议(开源必须),版本号(必须),修改时间(必须)。如果文件包含一些开源组件,则必须在文件注释中进行说明

    /*!
    * jRaiser 2 Javascript Library
    * sizzle - v1.9.1 (2013-03-15T10:07:24+0800)
    * http://jraiser.org/ | Released under MIT license
    *
    * Include sizzle (http://sizzlejs.com/)
    */
    

    文档注释(JSDoc)

    文档注释会以预定格式出现在API文档中,以“/”开头,其间每一行均以星号开头,(均与开始符的第一个星号对齐),且注释内容与“”间留一个空格

    @module。声明模块
    /**
    * Core模块提供最基础,最核心的接口
    * @module Core
    */
    
    @class。声明类。必须搭配@constructor或@static使用,分别标记非静态与静态类
    /**
    * 节点集合类
    * @class NodeList
    * @constructor
    * @param {ArrayLike<Element>} nodes 初始化节点
    */
    
    @method。声明函数或类方法。
    /**
    * 方法说明
    * @method 方法名
    * @for 所属类名
    * @param {参数类型} 参数名 参数说明
    * @return {返回值类型} 返回值说明
    */
    没有指定@for时,表示此函数为全局或模块顶层函数。参数有默认值时:
    
    [参数名=默认值]
    
    @example 示例注释,示例代码另起一行编写
    /**
    * @example
    * multiply(3,2)
    */
    
    @property。声明类属性
    /*
    * 属性说明
    * @property {属性类型} 属性名
    */
    

    2.常量和变量

    标识符
    标识符必须是字母、下划线、美元符号$和数字,但必须是字母、下划线、美元符号开头,依然是不能数字开头就行。 标识符区分大小写。

    声明

    var 声明一个变量 ,想起来再赋值都可以
    let 声明一个块作用域中的局部变量(新语法)
    const 声明一个常量(必须初始化赋值,不可以修改)
    JS中的变量声明和初始化是可以分开的

    a = 100 // (全局变量)现在不推荐,不严格;赋值之前不能引用;
    var b = 200; // var定义,当前作用域提升此声明; 
    let c = 300; // ES6支持,声明
    
    console.log(a,b,c)
    #-------------------------------------------------------------------
    100 200 300
    Info: End process (上午8:57:14)
    
    
    var a // 只是声明,a为undefined
    let b
    console.log(1,a,b)
    
    function hello()
    {
        //var a
        a = 100  
    }
    hello()  // 执行函数;
    console.log(a)   // a 全局突破函数 ,
    #-------------------------------------------
    
    

    var会把变量提升到当前全局或函数作用域。
    常量和变量的选择
    如果明确知道一个标识符定义后不再修改,应该尽量声明成const常量,减少被修改的风险,减少Bug。

    3.数据类型

    ES是动态语言,弱类型语言。
    虽然先声明了变量,但是变量可以重新赋值任何类型。

    // 类型转换 (隐式类型转换)
    // 弱类型
    console.log('====string====')
    console.log(a = 3 + 'magedu',typeof(a))
    console.log(a = null + 'magedu',typeof(a))
    console.log(a = undefined + 'magedu',typeof(a))
    console.log(a = true + 'magedu',typeof(a))
    console.log('-----------------------------')
    ====string====
    3magedu string
    nullmagedu string
    undefinedmagedu string
    truemagedu string
    
    // 数字
    console.log('====number====')
    console.log(a = null + 8,typeof(a))
    console.log(a = undefined + 8,typeof(a))  // undefined 没法转换成一个对应的数字;NaN
    console.log(a = true + 8,typeof(a))  // true = 1, false = 0
    console.log(a = false + 8, typeof (a))
    console.log('-----------------------------')
    ====number====
    8 'number'
    NaN 'number'
    9 'number'
    8 'number'
    
    // boolean  (当数字处理)
    console.log('=====boolean=====')
    console.log(a = null + true, typeof (a))
    console.log(a = null + false, typeof (a))
    console.log(a = undefined + true, typeof (a)) //undefined没法转换成一个对应的数字
    console.log(a = undefined + false, typeof (a)) // NaN
    console.log(a = null & true, typeof (a))
    console.log(a = undefined & true, typeof (a))
    console.log('-----------------------------')
    =====boolean=====
    1 'number'
    0 'number'
    NaN 'number'
    NaN 'number'
    0 'number'
    0 'number'
    
    // 短路  
    // && and     || or
    console.log(a = null && true, typeof (a)) // 逻辑运算符,null 直接就是false短路
    console.log(a = false && null, typeof (a)) // 逻辑运算符,false短路返回false
    console.log(a = false && 'magedu', typeof (a)) // boolean
    console.log(a = true && 'magedu', typeof (a)) // 字符串
    console.log(a = true && '', typeof (a)) // 字符串
    console.log('-----------------------------')
    null 'object'
    false 'boolean'
    false 'boolean'
    magedu string
     string
    
    // null
    console.log('=====null=====')
    console.log(a = null + undefined, typeof (a))     // 0 + null
    =====null=====
    NaN 'number'
    Info: End process (上午9:51:02)
    
    

    弱类型,不需要强制类型转换,会隐式类型转换。
    NaN,即Not a Number,转换数字失败。它和任何值都不等,和自己也不等,只能使用Number.isNaN(NaN)

    总结:
    遇到字符串,加号就是拼接字符串,所有非字符串隐式转换为字符串。
    如果没有字符串,加号把其他所有类型都当数字处理,非数字类型隐式转换为数字。undefined特殊,因为它都没有定义值,所以转换数字失败得到一个特殊值NaN。
    如果运算符是逻辑运算符,短路符,返回就是短路时的类型。没有隐式转换。
    除非你十分明确,否则不要依赖隐式转换。写代码的时候,往往为了程序的健壮,请显式转换。
    注意:以上的原则不要死记,忘了就实验,或者显示的类型转换

    4. 字符串

    将一个值使用' 单引号或者 " 双引号 引用起来就是字符串。
    ES6提供了反引号定义一个字符串,可以支持多行,还支持插值。

    let a = 'abc'
    let b = "135"
    let c = `line1
        line2
        line3
    ` // 支持多行
    console.log(c)
    #-----------------------------------------
    line1
        line2
        line3
    
    
    // 字符串插值,要求在反引号字符串中, python 3.6支持
    let name = "tom", age = 19
    console.log('Hi, my name = &{name}, I am &{age}')
    
    

    5. 转义字符

    JavaScript 定义反斜杠加上字符可以表示字符自身。注意,一些字符加上反斜杠后会表示特殊字符,而不是原字符本身,这些特殊转义字符被称为转义序列。


    let school = 'magedu'
    console.log(school.charAt(2)) // g 索引
    console.log(school[2]) // g
    console.log(school.toUpperCase()) // MAGEDU
    console.log(school.concat('.com')) // 连接
    console.log(school.slice(3)) // 切片,支持负索引
    console.log(school.slice(3, 5))
    console.log(school.slice(-2, -1))
    console.log(school.slice(-2))
    #--------------------------------------------------------------------------
    g
    g
    MAGEDU
    magedu.com
    edu
    ed
    d
    du
    
    let url = "www.magedu.com"
    console.log(url.split('.'))
    console.log(url.substr(7, 2)) // 返回子串从何处开始,取多长
    console.log(url.substring(7, 10)) // 返回子串,从何处开始,到什么为止
    #-----------------------------------------------------
    [ 'www', 'magedu', 'com' ]
    ed
    edu
    
    let s = 'magedu.edu'
    console.log(s.indexOf('ed')) // 3
    console.log(s.indexOf('ed', 4)) // 7
    console.log(s.replace('.edu', '.com'))
    s = ' \tmag edu \r\n'
    console.log(s.trim()) // 去除两端的空白字符。trimLeft、trimRight是非标函数,少用
    #---------------------------------------------------------------------------------------------------------
    3
    7
    magedu.com
    mag edu
    

    6. 数值型number

    在JS中,数据均为双精度浮点型范围只能在 -(2^53 -1) 和 2^53 -1之间,整型也不例外。
    数字类型还有三种符号值:+Infinity(正无穷)、-Infinity(负无穷)和 NaN (not-a-number非数字)。

    二进制0b0010、0B110。
    八进制0755。注意0855,将被认作十进制,因为8不在八进制中。ES6中最好使用0o前缀表示八进制。
    十六进制0xAA、0Xff。
    指数表示1E3(1000),2e-2(0.02)

    常量属性

    var biggestNum = Number.MAX_VALUE; // 
    var smallestNum = Number.MIN_VALUE;
    var infiniteNum = Number.POSITIVE_INFINITY;  // 正无穷
    var negInfiniteNum = Number.NEGATIVE_INFINITY; // 负无穷
    var notANum = Number.NaN;
    

    相关文章

      网友评论

          本文标题:52.3-JS标识符类型转换字符串和数值

          本文链接:https://www.haomeiwen.com/subject/yjsvnhtx.html