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

单词形式运算符:typeof,in,void,instanceof,new,delete。

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

单值表达式:

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

基本表达式:

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

 运算符按结果值的分类:

  • 一般表达式运算:(会强制类型转换)

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

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

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

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

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

      • 不能直接修改字符串字符;
      • 字符串连接运算会产生新的字符串;
      • 修改length无意义;

 特殊运算符:

  • 不直接产生运算效果而是影响运算效果:

    • void:使表达式总是返回undefined;
    • ? :
    • () :调整运算次序,优先级运算
    • ,:表达式顺序地连续执行
  • 不直接针对变量的值运算而是针对变量运算:
    • typeof:并不访问变量的值,而是取值的类型信息;所以对未定义的变量使用也不会报错;
    • instanceof:返回继承关系;
    • in:返回成员关系;
    • delete:删除成员;
时间: 2024-10-31 15:57:03

js:语言精髓笔记2--表达式的相关文章

js:语言精髓笔记1--语法

标识符: 命名: 语法以及类型----语法关键字 值(的存储位置)----变量和常量 绑定: 语法关键字对逻辑的绑定----作用域限定 变量对位置的绑定---变量生存周期的限定 声明:约定变量的生存周期和逻辑作用域: 标识符语义关系: 与值相关: 类型 变量: 直接量 对象 与逻辑相关: 控制流程语句: 标签声明 一般流程控制语句 异常 与值和逻辑都相关: 表达式: 值运算 对象存取 逻辑语句: 顺序 分支 循环 其他: 注释 JS引擎运行及响应错误:1.语法分析(语法分析错误):2执行(执行异

js:语言精髓笔记3----语句

JS语句分类: 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值语句: 方法调用语句: 分支语句: 条件分支语句: 多重分支语句: 循环语句: for() for...in while do..while 控制结构: 继续执行子句: 中断执行子句: 函数返回子句 异常触发语句: 异常捕获与处理: 其他: 空语句: with语句: 声明语句与赋值语句: 声明语句(显示声明)一定就有var,

js:语言精髓笔记5----语言分类

计算模型:源于对计算过程的不同认识: 基于不同计算模型一般分为: 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 基于程序本质分类: 命令式: 结构化编程(冯诺依曼:计算机系统以存储和处理为核心)[面向存储的编程]: 面向对象编程: 说明式: 函数式: 其他: //命令式语言基于存储结构进行算法设计:即:算法+数据结构=程序:数据的表形形式是编程的根本: 命令式语言面临的问题:如何抽象数据存储: 结构化编程:通过运算去改变内存: 结构: 控制结构:顺序,分支,循环: 组织结构:

js:语言精髓笔记4----面向对象编程概要

实例创建:obj = new contructor[(arguments)]; //如果没有参数可以忽略括号:所以注意这不是函数调用: 直接量与初始器:在之前的基本表达式中将直接量与初始器分开,这时因为直接量的声明中不包括运算过程,而初始器的声明中可以包括运算过程. 直接量:一般分为6种,包括正则表达式声明:在引擎看来,其值是在编译期就确知的: 初始器:包括函数,对象,数组声明:其本身可能是无法预期的. 对象: delete:能删除对象的大多数成员,包括全局对象Global的成员:不能删除var

js:语言精髓笔记12--动态语言特性(2)

对于括号内: 通过赋值时发生的重写: (Object1 = function() {}).prototype.value = 100; var obj1 = new Object1; console.log(obj1.value); // 100 语法声明阶段的重写: //会报错,一般引擎不承认在表达式中声明的标识符: (function Object2() {}).prototype.value = 100; 重写: 对内部对象系统的影响: 重写内置构造器:任意构造器的原型属性不受内置构造器重

js:语言精髓笔记13--语言技巧

消除代码全局变量名占用: //本质是使用匿名函数: void function(x, y, z) { console.log(x + y + z); }(1,2,3); //要使函数内的变量不被释放,需要使用引用: 一次性的构造函数: //维护原型链,保证标识符重写后,实例.constructor仍指向构造器: var Instance = function() {}; Instance.prototype = { constructor: Instance } Instance = new I

javascript语言精髓笔记

javascript是一门浏览器语言,对于后台攻城湿们.则是这样对其定义的 1. js是一门前端语言,因为js通常是web中的view部分,用来渲染最终呈现给用户的页面. 2. js是一门弱类型语言和解释性语言,没有使用编译器(编译器会检查语法错误,同样性质的比如php,ruby,python等.当然,不能说完全没有编译过程,只是不是严格意义上的编译),因为编译的目的最终应该是生成可执行的代码,而不是中间结果. 本文将关注两个方面 1.js重要概念 2.js小tips  主要关注容易被忽略的小问

JS 语言核心(JavaScript权威指南第六版)(阅读笔记)

前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分享本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思想需要细心和大量实践才能慢慢参悟,在这之前需要做的是能够运用它来开发,那么了解一些基础特性非常有必要,通常这些特性是需要经验积累,从各种坑中累计出来,但是还有一种看似很笨却很有效的学习方法.那就是将别人的经验记录下来,有事没事都拿出来看看,集合开发中的经验,这会非常有效. 调试工具 firebug

JavaScript语言精粹笔记

JavaScript语言精粹笔记 掌握语言的每个特性可以让你出风头,但是并不推荐,因为一部分的特性带来的麻烦可能远超本身的价值.正如书中所言,坏的材料并不能雕刻出好的作品,要成为一名更好的程序员,要取其精华去其糟粕.当你知道要做什么的时候,它还能表现的更好,编程时一件相对困难的事情,绝不应该在懵懂的状态下开始编程之旅. JS中的注意为//或者/*content*/,注释一定要精确地描述代码,不然没有用的注释比没有注释更糟糕. JS中的代码块不会创建新的作用域,因此变量应该被定义在函数的头部,而不