`
yiminghe
  • 浏览: 1460411 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript的两整数交换问题

阅读更多

不经意间想起了一道很久前在学校同学间曾经多次讨论的一个程序细节问题,甚至作为评价是否头脑灵活的一种方式:

 

x,y两整数交换值的方法

 

1. 中间变量

最常用的,刚开始学习就被灌输了这个思想:


z=x;

x=y;

y=z;

 

2.c学习时期,又接触了节省空间的做法


x=x+y;

y=x-y;

x=x-y;



3.c时期的终极解法,已然作为一种传奇


x=x^y;

y=x^y;

x=x^y;


4.但是在 javascript中存在最 简洁的两数交换(只在firefox中可用)


[x,y]=[y,x]




ps:占位符,疑惑的规范,尚不明白待细查


尚不太明确规范在何处规定这一行为,摘要一段关于赋值的描述:

 

只在firefox中可用,晕,规范没说


LeftHandSideExpression = AssignmentExpression


1.Let lref be the result of evaluating LeftHandSideExpression.
2.Let rref be the result of evaluating AssignmentExpression.
3.Let rval be GetValue(rref).
4.Throw a SyntaxError exception if the following conditions are all true:
•Type(lref) is Reference is true
•IsStrictReference(lref) is true
•Type(GetBase(lref)) is Enviroment Record
•GetReferencedName(lref) is either "eval" or "arguments"
5.Call PutValue(lref, rval).
6.Return rval.


主要是 GetValue ,PutValue 两个操作不太明白,赋值应该是在 5步 PutValue 中考虑了这种情况:


PutValue(V,W):


1.If Type(V) is not Reference, throw a ReferenceError exception.
2.Let base be the result of calling GetBase(V).
3.If IsUnresolvableReference(V), then
a.If IsStrictReference(V) is true, then
i.Throw ReferenceError exception.
b.Call the [[Put]] internal method of the global object, passing GetReferencedName(V) for the property name, W for the value, and false for the Throw flag.
4.Else if IsPropertyReference(V), then
a.If HasPrimitiveBase(V) is false, then let put be the [[Put]] internal method of base, otherwise let put be the special [[Put]] internal method defined below.
b.Call the put internal method using base as its this value, and passing GetReferencedName(V) for the property name, W for the value, and IsStrictReference(V) for the Throw flag.
5.Else base must be a reference whose base is an environment record. So,
a.Call the SetMutableBinding (10.2.1) concrete method of base, passing GetReferencedName(V), W, and IsStrictReference(V) as arguments.
6.Return.


此时 V是左值引用, V的base是environment record?? W是右值,那么就执行 SetMutableBinding 这个操作,已经看不太明白了。

 

 

分享到:
评论
2 楼 yiminghe 2010-04-15  
atian25 写道

x=x^y;
y=y^x;
x=x^y;

额,笔误笔误
1 楼 atian25 2010-04-15  

x=x^y;
y=y^x;
x=x^y;

相关推荐

    javascript 中文帮助文档

    AJAX(Asynchronous JavaScript and XML)技术实现了在不刷新整个页面的情况下,与服务器进行异步数据交换。XMLHttpRequest对象是实现AJAX的基础,而现代浏览器提供的fetch API则提供了更简洁的接口。 最后,...

    JavaScript中使用Json范例

    JavaScript中的JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集。JSON采用完全独立于语言的文本格式,但也使用了类似于C家族语言,包括C、C++、C#、Java、JavaScript、...

    C++与JavaScript交互

    通过CEF,C++可以直接与JavaScript执行环境交互,实现网页内容的加载、控制和数据交换。 5. **参数传递**:在C++调用JavaScript的过程中,可以传递数据作为参数。这些参数可以是基本类型,如整数、字符串,也可以是...

    JavaScript应用实例集合

    1. **基础语法**:JavaScript的基础包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组、符号和大整数)、操作符(算术、比较、逻辑、三元)、流程控制(条件语句if....

    微软JavaScript手册

    10. **AJAX**:异步JavaScript和XML,用于在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。 11. **错误处理**:JavaScript提供了try...catch...finally语句来捕获和处理运行时错误。 12. **ES6及...

    JavaScript中文帮助

    1. **基本语法**:JavaScript语法基于ECMAScript规范,包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组、符号、大整数)、运算符(算术、比较、逻辑、位、赋值等...

    JavaScript for Absolute Beginners

    学习JavaScript,你需要了解基础语法,包括变量、常量、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组、符号和大整数)以及运算符。变量的声明通常使用`var`、`let`或`const`关键字,它们之间的...

    javascript+常用指令

    AJAX(Asynchronous JavaScript and XML)允许网页在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。`XMLHttpRequest` 对象是实现AJAX的核心,现在更常见的是使用`fetch` API。 10. **模板字符串**:...

    JavaScript_javascript_

    10. **AJAX(Asynchronous JavaScript and XML)**:用于异步数据交换,实现页面不刷新的情况下更新内容。现代JavaScript通常使用`fetch` API进行Ajax请求。 11. **闭包(Closures)**:JavaScript的一种特性,允许...

    accp 5.0 s2 javascript 第六章

    特别是Number类型,要了解其浮点数的精度问题和处理大整数的方法。 3. **操作符**:涵盖了算术、比较、逻辑、赋值等多种操作符,如++和--的前置和后置用法,以及三元条件运算符的运用。 4. **控制流程**:条件语句...

    Javascript参考资料

    JavaScript,又被称为JS,是一种广泛应用于网页和网络应用...这个"Javascript参考资料"可能会涵盖以上各个知识点,并可能深入到具体使用技巧、最佳实践、常见问题解决等方面,对于学习和提升JavaScript技能非常有帮助。

    javascript date类型转成OLE(double)

    1. **精度问题**:由于JavaScript的Date对象在内部使用的是64位浮点数表示时间戳,因此在处理非常远的日期时可能会出现精度问题。 2. **时区问题**:在转换时需要注意时区的影响,尤其是如果涉及到不同地区间的日期...

    JavaScript ES6 知识点

    ### JavaScript ES6 知识点 #### 基础知识点参考 - **来源**:《Eloquent JavaScript》、《The Pro MERN Stack》 #### 数字类型与整除操作 在 JavaScript 中,所有的数字都是浮点类型(float)。这意味着即使是...

    阮一峰 JavaScript 教程.pdf

    - **数值**: JavaScript 中的数值类型包括整数和浮点数,还支持科学记数法表示。 - **字符串**: 由零个或多个16位Unicode字符组成,可以使用单引号、双引号或反引号定义。 - **对象**: 是一种复合值,可由键值对组成...

    javascript代码大全

    基本数据类型包括字符串(String)、数字(Number)、布尔值(Boolean)、空(null)、未定义(undefined)以及在ES6中引入的符号(Symbol)和大整数(BigInt)。 2. **操作符**:包括算术操作符(+、-、*、/、%)...

    accp5.0JavaScript第五章上机答案

    AJAX(异步JavaScript和XML)技术允许网页在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。XMLHttpRequest对象是实现AJAX的核心,现代浏览器还支持fetch API进行异步请求。 本“accp5.0JavaScript第...

    PTA-交换最小值和最大值

    在此挑战中,我们需要编写一个程序,该程序接收一个整数数组,找到其中的最大值和最小值,并交换它们的位置,然后返回结果数组。 描述中的 "PTA" 很可能代表 "Programming Task Assistant" 或类似的在线平台,它...

    JavaScript交换变量常用4种方法解析

    在JavaScript编程中,交换两个变量的值是一个常见的需求,特别是在处理算法和数据操作时。本文主要探讨了四种在JavaScript中交换变量的常用方法,并通过示例代码进行了详细解释。 1. **解构赋值** 解构赋值是ES6...

    JavaScript个人学习笔记

    在JavaScript中,交换两个变量的值通常需要借助第三个临时变量。此外,JavaScript还有许多其他特性,如作用域、闭包、原型链、异步编程等,这些都是深入学习JavaScript时需要掌握的重要概念。随着技术的发展,现代...

    JavaScript校验设计.zip

    3. **数值验证**:例如检查输入是否为整数、浮点数或者在特定范围内,可以使用isNaN()函数、parseInt()和parseFloat()进行转换,以及比较运算符来实现。 4. **正则表达式验证**:JavaScript支持正则表达式,可以...

Global site tag (gtag.js) - Google Analytics