JavaScript的控制流构造:特定于浏览器或JS固有的

前端之家收集整理的这篇文章主要介绍了JavaScript的控制流构造:特定于浏览器或JS固有的前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在JS中编写了一个小范围函数.我已经在Chrome 19,FF和IE(7-9)中测试了它并且它运行良好.我的问题与while语句有关.

function range(from,to,step)
{
    'use strict';
    var sCode,eCode,result;
    result = [];
    step = (!step || isNaN(step) || step === 0 ? 1 : step);
    sCode = (''+from).charCodeAt(0);
    eCode = (''+to).charCodeAt(0);
    step *= (sCode > eCode && step > 0 ? -1 : 1);
    do
    {
        if (String.fromCharCode(sCode))
        {
            result.push(String.fromCharCode(sCode));
        }
    }while((step > 0 && eCode >= (sCode+=step)) || (step < 0 && eCode <= (sCode+=step)));
    return result;
}

我记得在这里回答JS如何处理控制流构造和逻辑运算符的问题.我认为它与检查某个对象是否有某种方法有关,如果是,则使用它的返回值(if(event.returnValue&& e.returnValue === true)类型的东西).我可以似乎不再发现这个问题了,这就是我想知道的:

while((step > 0 && eCode >= (sCode+=step)) || (step < 0 && eCode <= (sCode+=step)));

由于函数的行为与我想要的一样,我认为我说得对,如果步骤< 0是假的,&&将忽略eCode> =(sCode = step),保持sCode的值不变.当步骤检查为真时,sCode将进/出.我已将此分配放在括号中,以确保将新分配的sCode值与eCode进行比较.同样,我假设括号将优先于逻辑运算符的赋值.

这对所有浏览器都适用,或者某种程度上是浏览器特定的?在某些浏览器中,这个函数是否有可能两次递增(或递减)sCode的值?在这种情况下,它并不重要(它可以很容易地解决任何问题).但我想知道这种行为是否是JavaScript本身或浏览器实现所固有的.

感谢您阅读这篇文章.如果你不介意的话
其他几件事(不重要,但只是想知道):

> JavaScript中的最大charCode是什么?快速浏览谷歌并没有告诉我,在JS控制台测试让我相信这是5999999999989759这看起来几乎令人难以置信,但是我可能需要再次刷我的中文.
>当from未定义时,(jslint approved)方法from.toString().charCodeAt(0);失败了,因为很明显,undefined没有toString方法,为什么(”from).charCodeAt(0);返回U都一样吗?我以为它隐含地调用了toString方法

最佳答案

I think I’m right in saying that,if step < 0 is false,&& eCode >=
(sCode+=step)
will be ignored,leaving the value of sCode unchanged

正确.如果第一个操作数的计算结果为false,则不会计算第二个操作数.

After when the step check is true,sCode will be in/decremented. I’ve
but this assignment in brackets,to be sure that the newly assigned
value of sCode will be compared to eCode. Again,I assume that the
brackets will give priority to the assignment over the logical
operator.

再次纠正,但是分配周围的括号是必需的,因为赋值具有lower precedence而不是比较.

Is this true for ALL browsers?

是.如果你找到一个不这样做的人,我会非常惊讶.

When from is undefined,the (jslint approved) approach
from.toString().charCodeAt(0); fails,because obvIoUsly,undefined had
no toString method,why the,does (''+from).charCodeAt(0); return U
all the same?

因为它将from的值与空字符串连接起来. from的值是未定义的,即coerced to a string,最后是字符串“undefined”,该字符串的索引0处的字符是“u”.

原文链接:https://www.f2er.com/js/429596.html

猜你在找的JavaScript相关文章