• js:语言精髓笔记2--表达式


    表达式:由运算符和运算元构成;JS中没有运算符的表达式称为单值表达式;没有运算元,孤立与代码上下文的运算符是不符合语法的;(表达式是有返回值的)

    单值表达式:

    • this引用;
    • 变量引用;
    • 直接量:
      • null
      • undefined
      • 字符串
      • 布尔值
      • 数值
      • 正则表达式

    基本表达式:

    • 单值表达式
    • 数组初始器:[]
    • 对象初始器:{}
    • 表达式分组运算:()

     运算符按结果值的分类:

    • 一般表达式运算:(会强制类型转换)
      • 数值运算                                                                                            //运算元:number ; 目标类型: number;
      • 位运算                                                                                               //运算元:number ; 目标类型: number;
      • 布尔值运算(! && ||)                                                                          //运算元:boolean; 目标类型: boolean;
    • 值逻辑运算:(将运算元理解为布尔值,但不强制类型转换)(&& ||)                       //运算元: 运算元 ;  目标类型: 运算元;
    • 字符串运算
      • 字符串连接:效果与concat()相同;                                                          //运算元:string; 目标类型: string;
    • 等值运算:(三种值类型中对字符串检测开销很大)                                           //运算元:*; 目标类型: boolean;
    • 赋值运算:
      • 一般赋值;                                                                                         //运算元:*; 目标类型: *;
      • 复合赋值;(除了 += 之外都不可对字符串运算)                                         //运算元:*; 目标类型: *;
      函数调用:使用小括号,传参并执行;                                                               //运算元:function; 目标类型: *;
      • 一般function函数调用;
      • Function类创建的函数对象调用;
    • 对象:创建,存取,检查等;                                                                          //运算元:object; 目标类型: *;
    • 其他

    序列检测(等值运算中):

    • 可比较序列的类型:boolean,string,number(任何值与nan比较返回false的原因正是因为其没有序列值)
    • 检测规则:(按数值比较优先原则)
      • 两个值类型比较:比较序列中大小;
      • 引用类型与值类型比较:引用类型转化为相同类型的值类型数据后比较;
      • 两个引用类型比较:无意义,总是返回false;因为找不到序列;

    赋值运算:赋值的效果就是修改存储单元中的值;

      • 语法上“100 = 10”这样赋值是成立的,但执行的时候会因左侧的的运算元是直接量,其存储单元不可写而导致错误;
      • 特例:由于值类型的字符串是一个不确定长度的连续数据块,赋值开销大,所以JS中字符串赋值为字符串的地址引用;所以产生
        • 不能直接修改字符串字符;
        • 字符串连接运算会产生新的字符串;
        • 修改length无意义;

     特殊运算符:

    • 不直接产生运算效果而是影响运算效果:
      • void    使表达式总是返回undefined;
      • ? :
      • ()        调整运算次序,优先级运算
      • ,        表达式顺序地连续执行
    • 不直接针对变量的值运算而是针对变量运算:
      • typeof           并不访问变量的值,而是取值的类型信息;所以对未定义的变量使用也不会报错;
      • instanceof      返回继承关系;
      • in                 返回成员关系;
      • delete           删除成员;
  • 相关阅读:
    2017 ICPC沈阳站L
    (POJ 1990)Mowfest(确定不再来一发树状数组么?)
    (POJ 3067) Japan (慢慢熟悉的树状数组)
    (POJ 2549)Sumsets(折半枚举)
    图的高siao存储结构——链式前向星
    (HDU1317)XYZZY(Floyd+spfa)
    (POJ1182)食物链(带权并查集-附通用模板)
    (HDU 1231)最大连续子序列
    (HDU 1598) find the most comfortable road (并查集+最小生成树)
    Problem: The World Final II(NEUOJ1175)排序+动态规划
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4008064.html
Copyright © 2020-2023  润新知