js:语言精髓笔记2--表达式
表达式:由运算符和运算元构成;JS中没有运算符的表达式称为单值表达式;没有运算元,孤立与代码上下文的运算符是不符合语法的;(表达式是有返回值的)
单值表达式:
- this引用;
- 变量引用;
- 直接量:
- null
- undefined
- 字符串
- 布尔值
- 数值
- 正则表达式
基本表达式:
- 单值表达式
- 数组初始器:[]
- 对象初始器:{}
- 表达式分组运算:()
运算符按结果值的分类:
- 一般表达式运算:(会强制类型转换)
- 数值运算 //运算元:number ; 目标类型: number;
- 位运算 //运算元:number ; 目标类型: number;
- 布尔值运算(! && ||) //运算元:boolean; 目标类型: boolean;
- 值逻辑运算:(将运算元理解为布尔值,但不强制类型转换)(&& ||) //运算元: 运算元 ; 目标类型: 运算元;
- 字符串运算
- 字符串连接:效果与concat()相同; //运算元:string; 目标类型: string;
- 等值运算:(三种值类型中对字符串检测开销很大) //运算元:*; 目标类型: boolean;
- 一般赋值; //运算元:*; 目标类型: *;
- 复合赋值;(除了 += 之外都不可对字符串运算) //运算元:*; 目标类型: *;
- 一般function函数调用;
- Function类创建的函数对象调用;
- 对象:创建,存取,检查等; //运算元:object; 目标类型: *;
- 其他
赋值运算:
函数调用:使用小括号,传参并执行; //运算元:function; 目标类型: *;
序列检测(等值运算中):
- 可比较序列的类型:boolean,string,number(任何值与nan比较返回false的原因正是因为其没有序列值)
- 检测规则:(按数值比较优先原则)
- 两个值类型比较:比较序列中大小;
- 引用类型与值类型比较:引用类型转化为相同类型的值类型数据后比较;
- 两个引用类型比较:无意义,总是返回false;因为找不到序列;
赋值运算:赋值的效果就是修改存储单元中的值;
- 语法上“100 = 10”这样赋值是成立的,但执行的时候会因左侧的的运算元是直接量,其存储单元不可写而导致错误;
- 不能直接修改字符串字符;
- 字符串连接运算会产生新的字符串;
- 修改length无意义;
特例:由于值类型的字符串是一个不确定长度的连续数据块,赋值开销大,所以JS中字符串赋值为字符串的地址引用;所以产生
特殊运算符:
- 不直接产生运算效果而是影响运算效果:
- void 使表达式总是返回undefined;
- ? :
- () 调整运算次序,优先级运算
- , 表达式顺序地连续执行
- 不直接针对变量的值运算而是针对变量运算:
- typeof 并不访问变量的值,而是取值的类型信息;所以对未定义的变量使用也不会报错;
- instanceof 返回继承关系;
- in 返回成员关系;
- delete 删除成员;
js:语言精髓笔记2--表达式的更多相关文章
- js:语言精髓笔记9--函数式语言特征
形式化运算系统的研究: 图灵:提出图灵机形式系统,通过0,1运算系统来解决复杂问题: 冯诺依曼:提出了冯诺依曼体系:即通过修改内存反映运算结果: 阿隆左.丘奇:提出新的运算范型Lambda演算,计算机 ...
- js:语言精髓笔记8--对象系统
封装: 一把对象系统,封装是由语法解析来实现的,即语法作用域:但js是动态语言,因此只能依赖变量作用域: js的变量作用域只有表达式,函数,全局三种:所以js只能实现public和private两种封 ...
- js:语言精髓笔记12--动态语言特性(2)
对于括号内: 通过赋值时发生的重写: (Object1 = function() {}).prototype.value = 100; var obj1 = new Object1; console. ...
- js:语言精髓笔记5----语言分类
计算模型:源于对计算过程的不同认识: 1.基于不同计算模型一般分为://教科书的一般分类 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 2.基于程序本质分类: //编程的经典法则 ...
- js:语言精髓笔记1--标识符与基本类型
标识符: 命名: 语法以及类型----语法关键字 //逻辑 值(的存储位置)----变量和常量 ...
- js:语言精髓笔记11--动态语言特性(1)
语言:程序最终被表达为数据(结构)和逻辑(算法),命令式和说明式/函数式语言分别从这两方面分类: 动态:在语言陈述时无法确定,必须在计算机执行时才能确定语言关系:JS是完全动态语言,导致其不确定性一般 ...
- js:语言精髓笔记7----原型继承
面向对象有三个基本特性:封装,继承,多态:如果都满足的话称为面向对象语言:而部分满足则称为基于对象语言: 数据类型实现模型描述: JavaScript对象模型: 构造过程:函数->构造器 构造器 ...
- js:语言精髓笔记6----作用域
js基础语法:由语句.表达式和变量构成: 语句是主要表达方式:单语句->复合语句(代码块)->程序片段(函数):js中没有单元和程序的概念: 作用域: 语法作用域与变量作用域的区别:前 ...
- js:语言精髓笔记3----语句
JS语句分类:(注意语句都是有返回值的) 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值 ...
随机推荐
- AngularJS--学习笔记(一)
AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 对于PhoneCat项目的 ...
- Poj 1061 青蛙的约会(扩展GCD)
题目链接:http://poj.org/problem?id=1061 解题报告:两只青蛙在地球的同一条纬度线上,选取一个点位坐标轴原点,所以现在他们都在同一个首尾相连的坐标轴上,那么他们现在的位置分 ...
- 菜鸟带你飞______DP基础26道水题
DP 158:11:22 1205:00:00 Overview Problem Status Rank (56) Discuss Current Time: 2015-11-26 19:11:2 ...
- SphinxSE的安装
SphinxSE 的使用 SphinxSE 的使用 :wiki SphinxSE是一个可以编译进MySQL 5.x版本的MySQL存储引擎,尽管被称作“存储引擎”,SphinxSE自身其实并不存储任何 ...
- CentOS 关闭蜂鸣器声音
也许你会遇到像我这样的情况,每次使用Linux终端,当听到发出“嘀嘀”的声音时候,我都有种把我的机箱拆掉把那个内置的蜂鸣装置拽下来的冲动.按 Tab时候“嘀嘀”,按空格时候“嘀嘀”,每个在vi中错误的 ...
- Python之property装饰器
参考: http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035600.html http://joy2everyone.iteye.com/ ...
- 【转】mysql 触发器实现两个表的数据同步
mysql通过触发器实现两个表的同步 目前,在本地测试成功. 假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更 ...
- kettle作业中的js如何写日志文件
在kettle作业中JavaScript脚本有时候也扮演非常重要的角色,此时我们希望有一些日志记录.下面是job中JavaScript记录日志的方式. job的js写日志的方法. 得到日志输出实例 o ...
- 1.python基础入门
作者:刘耀 出处:http://www.yaomr.com 欢迎转载 提示: 语法基于python3.5版本(会提示2.7版本和3.5版本的区别) Python命令行将以>>>开始, ...
- codeforces B. Petya and Staircases 解题报告
题目链接:http://codeforces.com/problemset/problem/362/B 题目意思:给出整数n和m,表示有n级楼梯和m级dirty的楼梯,接下来m个数表示对应是哪一个数字 ...