`

5 表达式和操作符

阅读更多

 

    下面的准则要牢记(有的时候觉得这个规则蛮麻烦的)

   ===

     [1] 如果左右两边是同一个对象的reference,那么返回true。这种情况都是false:

     var now = new Date();

     var arr1 = [now];

     var arr2 = [now];

     arr1 === arr2 (false)

     [2] 如果左右两边是数字,那么它们的值相等就返回true。可是注意一下,1 === 1.0 (true);如果其中只要有一个是NaN,那么结果一定是false。

     [3] 如果是str,那么只要内容一样就是true。可是,这里所谓的一样是忽略编码特征的,要加入带编码的比较,用localeCompare。

     [4] true === true (true) false === false (true) undefined === undefined (true) null === null (true)

undefined === null (false)

 

     ==

     [1] 数字和str的 == 和 === 是一至的,除了下面这种:undefined == null (true)

     [2] 如果一个是str,一个是数字,就会把str转成数字,然后再比较

     [3] 如果任何一个是true或者false,会将它们转成1或者0,然后再比较

     [4] object,会先用valueOf()再用toString()去把它们转成primitive类型的比较。Date会直接调用toString()转成primitive的进行比较

     [5] 其他都应该==都是false

var a = 5/2;
undefined
a;
2.5
var b = 2.5;
undefined
a == b;
true
a === b;
true
var str1 = "I love u";
undefined
var str2 = "I love " + "u";
undefined
str1 == str2;
true
str1 === str2;
true
var arr1 = [1,2,3];
undefined
var arr2 = [1,2,3];
undefined
arr1 == arr2;
false
arr1 === arr2;
false
var c = 0/0;
undefined
c;
NaN
c == a;
false
c === a;
false
isNaN(c);
true
var now = new Date();
undefined
var arr2 = [now];
undefined
var arr3 = [now];
undefined
arr2 === arr3;
false
arr2 == arr3;
false
undefined = undefined;
undefined
undefined == undefined;
true
undefined === undefined;
true
null == null;
true
null === null;
true
null == undefined;
true
null === undefined;
false
now.toString();
"Sat Apr 18 2009 08:23:08 GMT+0800 (CST)"
var yessterday = new Date(2009,04,17);
undefined
yesterday;
null
1.0 === 1;
true
0/0 === 0/0
false

 

比较操作符

比较操作符也要考虑转换的问题。首先基本原则就是尽量往数字上转,除了一种情况,就是两个都是str,那么它们就进行字符比较。另外NaN和任何东西比较都是false。

 

Str操作符

大部分都是很正常的理解,下面一种除外

var str = "this string is " + 1 +2; //this string is 3

这明显和+的结合律矛盾,不是从左至右的,要特别注意。

 

delete操作符

它只是删除reference,并没有删除reference指向的内容。

var my = new Object( );    // Create an object named "my"
my.hire = new Date( );     // my.hire refers to a Date object
my.fire = my.hire;        // my.fire refers to the same object
delete my.hire;           // hire property is deleted; returns true
document.write(my.fire);  // But my.fire still refers to the Date object
 
分享到:
评论

相关推荐

    C++后缀表达式转前缀表达式

    为了完成这个操作,我们需要使用栈数据结构来存储和处理表达式中的操作符和操作数。 首先,让我们了解一下什么是后缀表达式和前缀表达式。后缀表达式是一种表达式形式,其中操作符写在操作数之后,例如:a+b*c。...

    后台读取文本内容用正则表达式替换换行符

    效果描述: 经常被<textarea>中的回车符给困扰着, 回车换行的内容(\r\n)经常需要显示为HTML中的 ,这时就需要做替换操作了。... 如果只是简单的将字符... 问题不难,关键是得懂得运用正则表达式来操作!

    第四章 表达式与操作符.md

    个人学习笔记记录,不适合学习

    常用comsol的操作符和数学函数.pdf

    COMSOL 操作符和数学函数 COMSOL 是一款多物理场仿真软件,提供了丰富的操作符和数学函数来帮助用户建立和求解复杂的数学模型。下面是 COMSOL 中常用的操作符和数学函数: 1. 微分算符 d(f,x):计算变量 f 对 x ...

    后缀表达式转换和计算

    在转化过程中,我们需要建立一个操作符栈和一个字符数组,用来存放转化以后的表达式。然后,对得到的用户输入的字符串进行扫描,如果是数字或者小数点,则直接存放到数组中,并且在后面加入一个分隔符“|”。如果是...

    java堆栈的应用--中缀表达式转换成后缀表达式和计算

    2. **后缀表达式**(也称为逆波兰表示法):在这种表示法中,操作符紧跟在其操作数之后,例如,上述中缀表达式转换成后缀表达式为 `2 3 4 * +`。这种表示法简化了计算过程,因为不需要括号来明确优先级,而是通过...

    中缀表达式转后缀表达式树

    中缀表达式是我们日常数学运算中常见的形式,如 "2 + 3 * 4",而后缀表达式,也称为逆波兰表示法,将操作符放在操作数之后,如 "2 3 4 *",它便于解析和计算。这种转换在计算和编译器设计中很有用,因为后缀表达式...

    中缀表达式改后缀表达式运算

    中缀表达式转换为后缀表达式,是计算机科学中数据结构领域的一种常见问题,主要涉及到操作符优先级和括号处理。这个问题在程序设计中经常出现,特别是在编译原理和算法课程中。中缀表达式是我们日常使用的数学表达式...

    将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出

    具体来说,我们可以定义一个 `Node` 类来表示表达式树的节点,每个节点都包含一个值(操作符或操作数)和左右子节点。然后,我们可以编写一个递归函数 `convert_to_infix_expression`,该函数将在遍历表达式树时生成...

    C#写的表达式解析器,同时支持一元操作符和二元操作符,可自定义操作符,同时能设置表达式中的变量

    C#写的表达式解析器,支持多种操作符 如加减乘除幂模,同时还支持正负、三角函数,随机值等函数,可以支持自己扩展操作符,同时能支持设置表达式中的变量.表达式使用的是逆波兰式(中缀表达式转换成的后缀表达式),非递归...

    第5节-操作符详解.pdf

    根据提供的文档信息,本章节主要围绕C语言中的操作符进行了详细的阐述。操作符在编程语言中扮演着极其重要的角色,因为它们是构建程序逻辑的基本工具之一。以下是对文档提到的各种操作符及其用法的深入解释。 ### ...

    基于栈实现的中缀表达式转换为后缀表达式

    例如,"2 + 3 * 4" 就是一个中缀表达式,其中"+"和"*"是操作符,"2", "3" 和 "4" 是操作数。 2. **后缀表达式(逆波兰表示法)**:在后缀表达式中,操作符紧跟在其操作数之后。例如,中缀表达式 "2 + 3 * 4" 转换为...

    表达式语法分析器

    1. **数据结构选择**:使用栈来处理表达式中的操作符和操作数。栈是一种后进先出的数据结构,非常适合用于处理这类问题。 2. **操作符优先级**:定义了一个二维数组 `list` 来表示不同操作符之间的优先级关系。 3. *...

    中缀表达式变后缀表达式的求值

    首先,我们需要扫描整个中缀表达式,遇到数字时直接输出,遇到操作符时根据优先级与栈顶操作符进行比较,如果当前操作符优先级更高或者栈为空,则压入栈中;如果当前操作符优先级较低,则将栈顶操作符弹出并输出,...

    C#中缀表达式计算器

    在C#中实现一个中缀表达式计算器可以帮助开发者理解操作符优先级和如何利用数据结构来解决问题。 首先,我们需要了解栈(Stack)这种数据结构。栈是一种后进先出(LIFO)的数据结构,即最后存入的数据最先被取出。...

    算术表达式转换成前缀表达式

    前缀表达式是一种特殊的表达式形式,其中操作符位于操作数之前,而不是位于操作数之间。 在给定的代码中,我们可以看到作者使用了二叉树和栈来实现算术表达式的转换。以下是相关知识点的总结: 1. 二叉树(Binary ...

    java c++表达式求值(带括号和小数点)

    逆波兰表示法(Reverse Polish Notation,RPN)是一种数学表达式表示方法,它通过消除括号和操作符优先级来简化表达式求值的过程。在这个场景中,我们需要使用Java和C++编程语言来实现一个能够处理带有括号和小数点...

    前缀表达式转换和表达式计算设计报告

    对于操作数,它会在操作符之后),然后递归处理左子树和右子树。 3. **后缀表达式的求值**:利用栈结构,可以高效地计算后缀表达式。遍历后缀表达式,遇到数字时压入栈中,遇到运算符时弹出栈顶的两个元素进行运算...

    表达式二叉树的操作

    表达式二叉树,也称为运算符树或操作符树,是一种特殊的二叉树结构,主要用于表示数学表达式。在计算机科学中,特别是在编译器设计、解析算法和符号计算等领域,表达式二叉树扮演着重要角色。下面将详细阐述表达式...

Global site tag (gtag.js) - Google Analytics