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语句分类:(注意语句都是有返回值的) 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值 ...
随机推荐
- Commando War
Commando War“Waiting for orders we held in the wood, word from the front never cameBy evening the so ...
- Integer Inquiry
Integer Inquiry Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Sub ...
- 【Android代码片段之六】Toast工具类(实现带图片的Toast消息提示)
转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/6841266 作者:张燕广 实现的Toast工具类ToastUtil封装 ...
- Unity3d iOS基本优化和高级优化
原地址:http://www.cocoachina.com/bbs/read.php?tid=70395&page=1 分享看见的2篇好文.简单翻译了一下并且放出原文 http://www.c ...
- js判断元素是否隐藏的方法
代码如下: JavaScript代码如下: if( document.getElementById("div").css("display")==='none' ...
- [ruby on rails] 跟我学之(4)路由映射
前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...
- ZJOI 游记
在备战YZ提前招生考时去ZJOI玩了趟,ZJ果然人才辈出= =神犇讲课各种神听不懂啊orz day 0 Mon. 上午在AB班愉快地玩耍,下午就去HZ了. HZ真热啊... 学军也是节约= =空调都不 ...
- CSS3.0盒模型display:-webkit-box;的使用
box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典 的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box-flex属性还没 ...
- Android mtk单路录音问题
在单路录音中,有两种情况导致底层录音资源被占用的问题: 1 开启vmLog后,拨打一个电话,挂断电话.如果挂断电话后,没有关闭vmlog进程,则会导致其它AP 无法得到底层的录音资源,从而无法录音. ...
- 【SpringMVC】SpringMVC系列14之SpringMVC国际化
14.SpringMVC国际化 14.1.概述 14.2.用户切换选择语言