SkylineGlobe 邻近度(Proximity)分析JavaScript源代码

摘要:
邻近度描述了地理空间中两个地物距离相近的程度,是空间分析的一个重要手段。

邻近度(Proximity)描述了地理空间中两个地物距离相近的程度,是空间分析的一个重要手段。

SkylineGlobe 邻近度(Proximity)分析JavaScript源代码第1张

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>ToolTitle</title>


    <script language="javascript"src="ToolsCommon65.js"></script>

    <link rel="StyleSheet"href="Style.css"type="text/css">
    <style>.MenuButton
        {height:78px;width:65px;margin:5px;white-space:normal;
        }.MenuButtonHighlight
        {color:Red;font-weight:bold;
        }
    </style>
</head>
<body leftmargin="0"topmargin="0"marginwidth="0"marginheight="0"style="border: 0;
    overflow: auto; background-color: #ffffff"id="Body"onload="Init()"onunload="Reset(0,0);DeleteTarget();">
    <!--oncontextmenu="return false;"  onclick="bHide=true;HideOptionsNow()" > -->
       <table border="0"width="100%"cellspacing="0"cellpadding="2">
        <tr>
            <td id="TopAreaTD"height="50px"width="100%"valign="middle"style="background-color: #CAD8E2">
                <table border="0"width="100%"cellspacing="0"cellpadding="0">
                    <tr>
                        <td width="12px"></td>
                        <td width="55px"><img src="images/ProximityIcon.gif"align="absmiddle" /></td>
                        <td id="TitleTD"align="center"class="s12b  i18n">ToolName</td>
                        <!--<td valign="top"   id="CloseHelpTd"><img src="http://t.zoukankan.com/CommonImg/help.gif" border="0"   alt="help" title="help" onclick="DisplayHelpPopup6 (SGLang.i18nFile('help.html'),SGLang.i18n('help'))" style="cursor: pointer;"></td>-->
                    </tr>
                </table>
            </td>
        </tr>
        <tr height="1px">
            <td style="background-repeat: repeat-x;"background="../CommonImg/separator.gif">
            </td>
        </tr>
        <tr>
            <td>
                <br />
            </td>
        </tr>
    </table>
               <table border="0"cellspacing="1"cellpadding="3"bgcolor="#ffffff"class="s8"width="100%">
                    <tr >
                        <td class="s8b">
                            <label for="createAs"class="i18n">Text30</label>
                        </td>
                        <td align="left">
                        <input id="targetID"type="text"value=""style="100px"readonly="readonly"/>
<!--&nbsp;&nbsp;<button   type="button" onclick="SetTargetFromSelectedPress()"><span   class="i18n">Text31</span></button>
                        &nbsp;&nbsp;<button   type="button" onclick="CreateTargetPress()"><span   class="i18n">Text43</span></button>-->
                        <br />
                        <a id="SetTargetFromSelected"class="link i18n"onclick="SetTargetFromSelectedPress();">Text31</a>| 
                        <a id="CreateTarget"class="link i18n"class="link"onclick="CreateTargetPress();">Text43</a></div>
                        </td>            
                    </tr>  
                    <tr class='TableOtherLine'>
                        <td class="s8b">
                            <label for="createAs"class="i18n">Text32</label>
                        </td>
                        <td align="left">
                        <input id="trackedGroupID"type="text"value=""style="100px"readonly="readonly"/>
                        <!--&nbsp;&nbsp;<button   type="button" onclick="SetGroupFromSelectedPress()"><span   class="i18n">Text31</span></button>-->
                        <br />
                        <a id="SetGroupFromSelected"class="link i18n"onclick="SetGroupFromSelectedPress();">Text31</a> <span id="Span1" >
                        </td>            
                    </tr>
                   <tr >
                        <td align="top"class="s8b i18n">
                            <label for="createAs"class="i18n">Text33</label>
                        </td>
                        <td align="left">
                        <input id="warningRadiusID"type="text"value="700"style="100px; background-color:#FFD7C1"/><label for="createAs"class="i18n">Text35</label>
                        </td>
                    </tr>
                    <tr class='TableOtherLine'>
                        <td class="s8b">
                            <label for="createAs"class="i18n">Text34</label>
                        </td>
                        <td align="left">
                        <input id="dangerRadiusID"type="text"value="300"style="100px; background-color:#FFD7D7;"/><label for="createAs"class="i18n">Text35</label>
                        </td>            
                    </tr>  
                    <tr >
                        <td class="s8b">
                            <label for="createAs"class="i18n">Text42</label>
                        </td>
                        <td align="left">
                        <input id="chkTint"type="checkbox"style="20px;"onclick="bTint = document.getElementById('chkTint').checked;"checked="checked"/>
                        </td>            
                    </tr> 
                    <tr>
                        <td colspan="2"valign="top"class="s8b i18n"align="center">
                        
                    <button id="startStopButton"class="MenuButton"onclick="StartStop()"><img src="images/startCursor.gif" /><br /> <span id="startstopSpan"class="i18n">Text36</span></button> 

                        </td>
                        </tr>
    </table>

 <object id="SGWorld"classid="CLSID:3a4f9197-65a8-11d5-85c1-0001023952c1">    </object>


<script language="JavaScript">
functionDetectTEMode()
{
varvMode =document.documentMode;
varrMode = 'IE5 Quirks Mode';
if(vMode == 8){
  rMode = 'IE8 Standards Mode';
} else if(vMode == 7){
  rMode = 'IE7 Strict Mode';
} else if(vMode == 9){
  rMode = 'IE9 Strict Mode';
}
//alert('Rendering in: ' + rMode);
}
DetectTEMode();

//***delete the uneeded ones at the end
vargDisplayHeadingSlope ;
vargDisplayMinMaxSlope ;
vargDisplayCoordinateInfo;
vargLastClickMouseX;
vargLastClickMouseY;
///var popupMsg;
vartimeoutID;
varmeasureDistance;
varwarningSlope;
varalertSlope;
vararrowMaxPositive;
vararrowMaxNegative;
vararrowHeading;
varlabelMaxPositive;
varlabelMaxNegative;
varlabelHeading;
varlabelCoordinateInfo;
vargroupID;
varcolorNormalPositive ;
varcolorNormalNegative;
varcolorHeading;
varcolorLinewarning ;
varcolorLineAlert;
varcolorLabel;
varcolorTextNormal;
varcolorTextWarning;
varcolorTextAlert;
vargNameIndex = 1;

varcameraClickPos;
varrootId;

//Proximity globals
varisStart = false;
varwarningRadius;
vardangerRadius;
vartargetObj;
vartrackedObjArray =[];
varcolorLineWarning;
varcolorLineDanger;
varbTint = true;
vartmpGroup;
varbInPlaceTarget = false;
varmanualTargetLabel;

//--------------//Init
functionInit() {

    targetObj = null;
    manualTargetLabel = null;

    SGWorld.AttachEvent("onFrame", onFrame);

    colorLineWarning =SGWorld.Creator.CreateColor(238, 173, 23, 255);
    colorLineDanger =SGWorld.Creator.CreateColor(255, 117, 117, 255);

    Reset(true, false);

    TargetPathNameParam =GetParamValue("TargetPathName", "");
    if(TargetPathNameParam != "")
        SetTargetFromPathName(TargetPathNameParam);
    else{
        if(SGWorld.ProjectTree.FindItem("Target") != 0)
            SetTargetFromPathName("Target");
    }

    TrackedGroupPathNameParam =GetParamValue("TrackedGroupPathName", "");
    if(TrackedGroupPathNameParam != "")
        SetTrackedGroupFromPathName(TrackedGroupPathNameParam);
    else{
        if(SGWorld.ProjectTree.FindItem("Tracked Group") != 0)
            SetTrackedGroupFromPathName("Tracked Group");
    }

    if(document.getElementById("targetID").value != "" &&document.getElementById("trackedGroupID").value != "")
        StartStop();


}

//------------//onFrame
functiononFrame() {
    if(isStart == false ||targetObj == null)
        return;

    displayProximityInfo();

}

//--------------//SetTargetFromSelectedPress
functionSetTargetFromSelectedPress() {
    varnode =SGWorld.ProjectTree.GetNextItem("", 10);
    if(node == 0 ||SGWorld.ProjectTree.IsGroup(node)) {
        alert(SGLang.i18n("Text38"));
        return;
    }
    SetTarget(node);    
}

//--------------//SetTargetFromPathName
functionSetTargetFromPathName(pathName) {
    varnode =SGWorld.ProjectTree.FindItem(pathName);
    if(node == 0 ||SGWorld.ProjectTree.IsGroup(node)) {
        alert(SGLang.i18n("Text38"));
        return;
    }
    SetTarget(node);    
}

//--------------//SetTarget
functionSetTarget(node) {

    try{
        varobject =SGWorld.ProjectTree.GetObject(node);
        vartargetPosition =object.Position;
        if(!targetPosition) {
            alert(SGLang.i18n("Text38"));
            return;
        }
        document.getElementById("targetID").value =object.TreeItem.Name;
        DeleteTarget();
        targetObj =object;
    }
    catch(err) {
        alert(SGLang.i18n("Text38"));
        return;
    }
}

//--------------//CreateTargetPress
functionCreateTargetPress() {
    if(!bInPlaceTarget) {
        bInPlaceTarget = true;
        SGWorld.AttachEvent("OnLButtonUp", CreateTarget);
        SGWorld.AttachEvent("OnRButtonUp", CreateTargetRButtonUp);
        SGWorld.AttachEvent("OnInputModeChanged", ResetCreateTarget);

        document.getElementById("CreateTarget").innerText =SGLang.i18n("Text46");

        SGWorld.Window.SetInputMode(1, abspath() + "/cursor_m.cur");
        SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text44"));
    }
    else{
        ResetCreateTarget();
    }
}

//--------------//CreateTargetRButtonUp
functionCreateTargetRButtonUp(Flags, X, Y) {
    ResetCreateTarget();
}

//--------------//ResetCreateTarget
functionResetCreateTarget() {
    document.getElementById("CreateTarget").innerText =SGLang.i18n("Text43");

    SGWorld.DetachEvent("OnLButtonUp", CreateTarget);
    SGWorld.DetachEvent("OnInputModeChanged", ResetCreateTarget);
    bInPlaceTarget = false;
    SGWorld.Window.SetInputMode(0);
}

//--------------//CreateTarget
functionCreateTarget(Flags, X, Y) {
    varCursorCoord =SGWorld.Window.pixelToWorld(X, Y);
    if(CursorCoord == null)
        ResetCreateTarget();

    varimageLabelStyle =SGWorld.Creator.CreateLabelStyle(0);
    imageLabelStyle.Scale = 1.0;

    DeleteTarget();

    manualTargetLabel =SGWorld.Creator.CreateImageLabel(CursorCoord.Position, abspath() + "/Images/icon.png", imageLabelStyle, SGWorld.ProjectTree.HiddenGroupID, SGLang.i18n("Text45"));
    manualTargetLabel.SaveInFlyFile = false;
    document.getElementById("targetID").value =manualTargetLabel.TreeItem.Name;
    targetObj =manualTargetLabel;
    ResetCreateTarget();
}

//--------------//DeleteTarget
functionDeleteTarget() {
    if(manualTargetLabel != null) {
        SGWorld.Creator.DeleteObject(manualTargetLabel.ID);
        manualTargetLabel = null;
    }
}


//--------------//SetGroupFromSelectedPress
functionSetGroupFromSelectedPress() {
    varnode =SGWorld.ProjectTree.GetNextItem("", 10);
    SetTargetGroup(node);
}

//--------------//SetTrackedGroupFromPathName
functionSetTrackedGroupFromPathName(pathName) {
    varnode =SGWorld.ProjectTree.FindItem(pathName);
    SetTargetGroup(node);
}


//--------------//SetGroupFromSelectedPress
functionSetTargetGroup(nodeID) {
    varnode =nodeID;
    /*To allow layers as well ViewshedQuery tool uses:     if (node == 0 || !(SGWorld.ProjectTree.IsGroup(node) || SGWorld.ProjectTree.IsLayer(node))) { */
    if(node == 0 ||SGWorld.ProjectTree.IsLayer(node)) {
        alert(SGLang.i18n("Text39"));
        return;
    }
    if(SGWorld.ProjectTree.IsGroup(node)) {//group
EmptytrackedObjArray();
        searchObjects2(node, AddObjectToArray);
        document.getElementById("trackedGroupID").value =SGWorld.ProjectTree.GetItemName(node);
    }
    else{//object
        varobject =SGWorld.ProjectTree.GetObject(node);
        vartrackedPosition =object.Position;
        if(!trackedPosition) {
            alert(SGLang.i18n("Text38"));
            return;
        }

        EmptytrackedObjArray();
        PushtrackedObj2Array(object);
        document.getElementById("trackedGroupID").value =object.TreeItem.Name;
    }

}



//--------------//StartStop
functionStartStop() {
    if(!isStart) {
        isStart = true;
        document.getElementById("targetID").disabled = true;
        document.getElementById("SetTargetFromSelected").disabled = true;
        document.getElementById("CreateTarget").disabled = true;
        document.getElementById("trackedGroupID").disabled = true;
        document.getElementById("SetGroupFromSelected").disabled = true;
        document.getElementById("warningRadiusID").disabled = true;
        document.getElementById("dangerRadiusID").disabled = true;
        document.getElementById("chkTint").disabled = true;
        

        startstopSpan.innerHTML =SGLang.i18n("Text37");

        warningRadius =document.getElementById("warningRadiusID").value;
        dangerRadius =document.getElementById("dangerRadiusID").value;

    }
    else{
        Reset(false, false);
    }

}

//------------------//Reset//------------------
functionReset(FirstTime, FromMouseInputMode) {

    try{
        startstopSpan.innerHTML =SGLang.i18n("Text36");
        if(isStart &&SGWorld.Project.Name != "") {
            isStart = false;
            deleteObjs();
        }
        isStart = false;

        document.getElementById("targetID").disabled = false;
        document.getElementById("SetTargetFromSelected").disabled = false;
        document.getElementById("trackedGroupID").disabled = false;
        document.getElementById("SetGroupFromSelected").disabled = false;
        document.getElementById("warningRadiusID").disabled = false;
        document.getElementById("dangerRadiusID").disabled = false;
        document.getElementById("chkTint").disabled = false;
        document.getElementById("CreateTarget").disabled = false;
    }
    catch(err) { isStart = false; }
}


//-------------//AddObjectToArray
functionAddObjectToArray(object, type, altitudeType) {

    SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text40"));
    SGWorld.ProjectTree.EnableRedraw(0);

    if(type == 1) {
        //In the future may want to work on the pivot of the polyline. was: if (!DrawOnPolyline(geometry, type, altitudeType))
            return false;
    }
    else if(type == 2)
    {
        //In the future may want to work on the pivot of the polyline. was: if (!DrawOnPolygon(geometry, type, altitudeType))
            return false;
    }
    else //Selected points
{
        PushtrackedObj2Array(object);
    }
    return true;
}

//-------------------//searchObjects2 - modified from ToolsCommon65 searchGeometries
functionsearchObjects2(parentNode, callbackFunc) {
    SGWorld.ProjectTree.EnableRedraw(0);
    searchObjectsLeaf2(parentNode, callbackFunc);
    SGWorld.ProjectTree.EnableRedraw(1);
}
//-------------------//searchObjectsLeaf2 - modified from ToolsCommon65 searchGeometriesLeaf2
functionsearchObjectsLeaf2(parentNode, callbackFunc) {

    if(SGWorld.ProjectTree.IsLayer(parentNode))  //Layer
{
        varlayer =SGWorld.ProjectTree.GetLayer(parentNode);
        varfeatureGroups =layer.FeatureGroups;
        for(vari = 0; i <featureGroups.Count; i++) //Traverse all sub-layers
{
            varfeatureGroup =featureGroups.Item(i);
            varaltitudeType =AltitudeMethodToAltitudeType(featureGroup.GetProperty("Altitude Method"));
            varfeatures =featureGroup.Features;
            for(varj = 0; j <features.Count; j++) {
                varret;
                if(featureGroup.GeometryType != 0)
                    ret =callbackFunc(features.Item(j).Geometry, featureGroup.GeometryType, altitudeType);
                else{
                    if(features.Item(j).Geometry.GeometryType == 0) //Point
{
                        varposition =SGWorld.Creator.CreatePosition(features.Item(j).Geometry.X, features.Item(j).Geometry.Y, features.Item(j).Geometry.Z);
                        ret =callbackFunc(position, featureGroup.GeometryType, altitudeType);
                    }
                }
                if(!ret)
                    return;
            }
        }
    }
    else{
        varnode =SGWorld.ProjectTree.GetNextItem(parentNode, 11);
        while(node != "") {
            if(SGWorld.ProjectTree.IsGroup(node) ||SGWorld.ProjectTree.IsLayer(node))
                searchObjectsLeaf2(node, callbackFunc);
            else{
                varObject =SGWorld.Creator.GetObject(node);
                if(Object != null) {
                    varaltitudeType =Object.Position.AltitudeType;
                    varret;
                    if(Object.ObjectType == 1 ||Object.ObjectType == 2)
                       ret =callbackFunc(Object/*.Geometry*/, Object.ObjectType, altitudeType);
                    elseret =callbackFunc(Object/*.Position*/, Object.ObjectType, altitudeType);

                    if(!ret)
                        return;
                }
            }

            node =SGWorld.ProjectTree.GetNextItem(node, 13);
        }
    }
}

//--------------//EmptytrackedObjArray
functionEmptytrackedObjArray() {
    while(trackedObjArray.length > 0) {
        trackedObjArray.pop();
    }
}

//--------------//PushtrackedObj2Array
functionPushtrackedObj2Array(object) {
    trackedObjArray.push({
        "object": object,
        "lineObj": null,
        "distLabelObj": null,
        "level": "undefined"});
}

//------------//deleteObjs
functiondeleteObjs() {//In the future move logic to deleteObj that can be called from here and from other places.
    try{
        //while (trackedObjArray.length > 0)
        for(vari = 0; i <trackedObjArray.length; i++) {
            //var item = trackedObjArray.pop();
            varitem =trackedObjArray[i];
            if(item.lineObj != null) {
                SGWorld.Creator.DeleteObject(item.lineObj.ID);
                item.lineObj = null;
            }
            if(item.distLabelObj != null) {
                SGWorld.Creator.DeleteObject(item.distLabelObj.ID);
                item.distLabelObj = null;
            }
            item.level = "undefined";
            if(bTint) item.object.Terrain.Tint =SGWorld.Creator.CreateColor(0, 0, 0, 0);

        }
    }
    catch(err) { alert(SGLang.i18n("Text41") +err); Reset(0, 0); }
}


//------------//displayProximityInfo
functiondisplayProximityInfo() {
    //debugger;
    if(!isStart ||targetObj == null) {
        return false;
    }
    try{
        for(vari = 0; i <trackedObjArray.length; i++) {

            //calculate distance
            vardist =SGWorld.CoordServices.GetDistance3D(targetObj.Position, trackedObjArray[i].object.Position);
            if(dist <=warningRadius) {
                //Create/Update polygon
                if(trackedObjArray[i].lineObj == null) {
                    varabsoluteTargetObj =targetObj.Position.ToAbsolute(0);
                    varabsoluteTrackedObj =trackedObjArray[i].object.Position.ToAbsolute(0);
                    varpointsArray =[absoluteTargetObj.X, absoluteTargetObj.Y, absoluteTargetObj.Altitude, absoluteTrackedObj.X, absoluteTrackedObj.Y, absoluteTrackedObj.Altitude];
                    trackedObjArray[i].lineObj =SGWorld.Creator.CreatePolylineFromArray(pointsArray, colorLineDanger, 3, SGWorld.ProjectTree.HiddenGroupID); //leave this comment: ATC_TERRAIN_ABSOLUTE = 3
trackedObjArray[i].lineObj.SaveInFlyFile = false;
                    trackedObjArray[i].lineObj.SetParam(5440, 1);
                    trackedObjArray[i].lineObj.LineStyle.Width = -2}
                else{
                    trackedObjArray[i].lineObj.Geometry.StartEdit()
                    //update second point
                    varabsolutePosition =trackedObjArray[i].object.Position.ToAbsolute(0);
                    trackedObjArray[i].lineObj.Geometry.Points.Item(1).X =absolutePosition.X;
                    trackedObjArray[i].lineObj.Geometry.Points.Item(1).Y =absolutePosition.Y;
                    trackedObjArray[i].lineObj.Geometry.Points.Item(1).Z =absolutePosition.Altitude;
                    trackedObjArray[i].lineObj.Geometry.EndEdit()
                }
                //Create/Update Text ***arik: Does it look good? what to do when below ground
                if(trackedObjArray[i].distLabelObj == null) {
                    varabsoluteTargetObj =targetObj.Position.ToAbsolute(0);
                    varabsoluteTrackedObj =trackedObjArray[i].object.Position.ToAbsolute(0);
                    varmiddlePosition =absoluteTargetObj.MoveToward(absoluteTrackedObj, dist / 2);
                    middlePosition.Altitude =middlePosition.Altitude +warningRadius / 40;
                    
                    varlabelStyle =SGWorld.Creator.CreateLabelStyle(0);
                    labelStyle.Bold = true;
                    //labelStyle.LineToGround = false;
labelStyle.Scale =warningRadius / 20; 
                    labelStyle.FontSize = 10;

                    trackedObjArray[i].distLabelObj =SGWorld.Creator.CreateTextLabel(middlePosition, dist.toFixed(2), labelStyle, SGWorld.ProjectTree.HiddenGroupID);
                    trackedObjArray[i].distLabelObj.SaveInFlyFile = false;

                }
                else{
                    varabsoluteTargetObj =targetObj.Position.ToAbsolute(0);
                    varabsoluteTrackedObj =trackedObjArray[i].object.Position.ToAbsolute(0);
                    varmiddlePosition =absoluteTargetObj.MoveToward(absoluteTrackedObj, dist / 2);
                    middlePosition.Altitude =middlePosition.Altitude +warningRadius / 40;
                    trackedObjArray[i].distLabelObj.Position =middlePosition;
                    trackedObjArray[i].distLabelObj.Text =dist.toFixed(2);
                }



                //Color objects
                varnewLevel =(dist >dangerRadius) ? "warning": "danger";
                if(trackedObjArray[i].level !=newLevel) {
                    trackedObjArray[i].lineObj.LineStyle.Color =(newLevel == "danger") ?colorLineDanger : colorLineWarning;
                    trackedObjArray[i].distLabelObj.Style.TextColor =(newLevel == "danger") ?colorLineDanger : colorLineWarning;
                    if(bTint) {
                        trackedObjArray[i].object.Terrain.Tint =(newLevel == "danger") ?colorLineDanger : colorLineWarning;
                        trackedObjArray[i].object.Terrain.Tint.SetAlpha(0.5);
                    }
                }


            }
            else{
                if(trackedObjArray[i].lineObj != null) {
                    SGWorld.Creator.DeleteObject(trackedObjArray[i].lineObj.ID);
                    trackedObjArray[i].lineObj = null;
                }
                if(trackedObjArray[i].distLabelObj != null) {
                    SGWorld.Creator.DeleteObject(trackedObjArray[i].distLabelObj.ID);
                    trackedObjArray[i].distLabelObj = null;
                }
                trackedObjArray[i].object.Terrain.Tint =SGWorld.Creator.CreateColor(0, 0, 0, 0);
            }

        }

    }
    catch(err) { alert(SGLang.i18n("Text41") +err); Reset(0, 0); }
}

</script>

</body>
</html>

免责声明:文章转载自《SkylineGlobe 邻近度(Proximity)分析JavaScript源代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Centos7下安装Docker(详细的新手装逼教程)GSYVideoPlayer 视频播放库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一例基于thinkphp,jquery和bootstrap渲染的查询数据分页器

对于某些查询记录很多的结果,web页面不得不采用分页器,现在奉上一例代码,其主要逻辑是:由页面的dom 节点发起ajax请求,返回的查询结果根据页面布局需要进行切片;并根据总记录数和页面展现的条数算出页码列表 html部分 <!doctype html><html lang="en"><head> <meta...

Scala中class、object、case class、case object区别

/** class、object、case class、case object区别 * * class 类似Java中的class; * object Scala不能定义静态成员,用定义单例对象代之; * case class被称为样例类,是一种特殊的类,常被用于模式匹配。 * * 一、class 和 object 关系: *...

python None 和 NaN

python原生的None和pandas, numpy中的numpy.NaN尽管在功能上都是用来标示空缺数据。但它们的行为在很多场景下确有一些相当大的差异。由于不熟悉这些差异,曾经给我的工作带来过不少麻烦。 特此整理了一份详细的实验,比较None和NaN在不同场景下的差异。 实验的结果有些在意料之内,有些则让我大跌眼镜。希望读者看过此文后会None和NaN...

【ECMAScript5】ES5基础

一、语法 区分大小写。 变量是弱类型的,可以初始化为任意值,也可以随时改变变量所存数据的类型。 每行结尾的分号可有可无,但是建议加上。 注释 单行注释以双斜杠开头(//) 多行注释以单斜杠和星号开头(/*),以星号和单斜杠结尾(*/) 代码块:用{ } 包起来的 二、变量 使用 var (variable的缩写)运算符声明变量。 可以用一个var...

js 把对象按照属性名的字母顺序进行排列

var obj = {name: "zhangsan", age: 8, ace: 5, nbme: "lisi"};//要排序的对象 function objKeySort(obj) {//排序的函数 var newkey =Object.keys(obj).sort();   //先用Object内置类的keys方法获取要排序对象的属性...

Corona SDK新手教程:tap、touch和multitouch的区别

本教程主要讲解一下tap、touch和multitouch的区别,以及如何处理每种方式。 如果是新手的话,可以先复习一下之前的文章 CoronaSDK之交互系统和事件检测 1 Tap检测 Tap事件是用户和触屏之间交互最基础的一种。本质上来说,一个tap就是表示用户用手指接触到屏幕,然后在差不多附近的位置再抬起的过程。这个tap事件只有在用户在同一个点接触...