是否有一个可搜索的、唯一的标识符(即密钥、uid 等... - 请原谅可能对专有术语的滥用)来区分此示例中的 ob1 和 ob2?
var makeObject = function() {
return {example: 'property'};
};
var ob1 = makeObject();
var ob2 = makeObject();
Run Code Online (Sandbox Code Playgroud)
现在我们知道:
ob1 === ob2; // false
Run Code Online (Sandbox Code Playgroud)
除了这种布尔不等式区别之外,是否有较低级别的唯一字符被临时分配给 ob1 和 ob2?如果是这样,这些独特的角色可以通过控制台访问吗?
编辑: 如何确定两个 JavaScript 对象相等?真正涉及到我的问题的差异化方面,所以谢谢你。我觉得我的问题的另一部分更多地关注 ob1 与 ob2 相比的机器级别差异(除了实用性和/或用户可访问性),我相信“内存中的不同位置”肯定会回答这个问题。
我需要一个功能:
function isSame(a, b){
}
Run Code Online (Sandbox Code Playgroud)
其中,如果a和b相同,则返回true.
,我试过return a === b,但我发现[] === []会返回false.
我期望这个功能的一些结果可以给出:
isSame(3.14, 3.14); // true
isSame("hello", "hello"); // true
isSame([], []); // true
isSame([1, 2], [1, 2]); // true
isSame({ a : 1, b : 2}, {a : 1, b : 2}); //true
isSame([1, {a:1}], [1, {a:1}]); //true
Run Code Online (Sandbox Code Playgroud) 在这个答案中,有一个简单的函数将返回包含原始值的数组的数组相等性.
但是,我不确定它为什么会起作用.这是功能:
function arrays_equal(a,b) { return !!a && !!b && !(a<b || b<a); }
Run Code Online (Sandbox Code Playgroud)
我对下半场最感兴趣; 这一点:
!(a<b || b<a)
Run Code Online (Sandbox Code Playgroud)
为什么<和>比较数组时工作,但==不?
如何在JavaScript中使用少于和多于方法?
我在typescript中创建了一个关于向量的lib.我的第一次测试失败:).
它与TypeScript/JavaScript中的对象相等有关,但我找不到让测试变为绿色的方法.在typescript的官方文档http://www.typescriptlang.org/Handbook#classes中没有提到对象相等.
有人可以帮我一把吗?
这是源代码.
class Vector {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
add(that: Vector) {
return new Vector(this.x + that.x, this.y + that.y);
}
}
export = Vector;
Run Code Online (Sandbox Code Playgroud)
然后我对这个课进行了单元测试,如下所示
var Vector = require("../lib/vector")
describe("vector", function () {
it("should add another vector", function () {
var v1 = new Vector(1, 1);
var v2 = new Vector(2, 3);
expect(v1.add(v2)).toEqual(new Vector(3, 4));
});
});
Run Code Online (Sandbox Code Playgroud)
执行时获得以下错误
Failures:
1) vector should add …Run Code Online (Sandbox Code Playgroud) 最近我一直对此感到困惑,我希望根据是否选择/激活地图标记来动态更新地图标记图像(每个MapMarker都有一个类别引用活动图像或默认图像来自两个图像集合:interestIcons和interestIconsSelected.基本上我有一个MapMarkers集合,它们通过map标记集合进行映射.每个MapMarker都是MapView.Marker的子组件.
我想将所有MapMarkers渲染为默认的非选择/非活动状态,其中包含来自interestIcons的默认图像,当选中时,MapMarker图像应该从interestIconsSelected更改为活动图像,当选择另一个MapMarker时,之前选择的应该是恢复为默认图像,新的应更改为所选图像.
目前,我能够使用默认图像渲染地图标记,但是当选择地图标记时,图像似乎不会立即更改,除非您再次缩小/放大,即导致某种重新渲染,我想这样点击MapMarker会立即导致图像更新.
MapScreen.js: 通过地图渲染所有MapView.Marker MapMarkers的MapView.
<MapView
ref={map => { this._map = map }}
style={Styles.Map.map}
initialRegion={this.props.region}
onRegionChange={this.handleRegionChange}
>
{
this.props.events
.filter(this.eventFilterTimeNearFuture)
.filter(this.eventFilterTimeNotPast)
.filter(this.eventFilterDistance)
.filter(this.eventFilterInterest)
.map(e =>
<MapView.Marker
key={e.id}
onPress={() => this.handleLocationPush(e)} // Set selected event state
coordinate={e.location}
>
<MapMarker
event={e}
size={this.state.markerSize}
selected={this.state.selectedEvent} // The selected event set by state call.
/>
</MapView.Marker>
)
}
{ !this.props.regionMock &&
<MapView.Marker
key={'userLocation'}
coordinate={this.props.region}
>
<MapMarker size={'user'} />
</MapView.Marker>
}
</MapView>
Run Code Online (Sandbox Code Playgroud)
MapMarker.js
import {interestIcons, interestColors, interestIconsSelected} from "../../utils/Icons";
import {Styles} from '../../StyleProvider';
class MapMarker …Run Code Online (Sandbox Code Playgroud) 有可能比较两组json对象的差异吗?我所拥有的是一个通过jquery $ post()轮询JSON对象的脚本.我想要做的是获取刚刚轮询的对象并将其与存储的对象进行比较.如果从一个到另一个的任何变化将它们应用于存储的对象或替换它(以任何一种方式),但是从我正在使用的UI角度来看,通过找到它们之间的差异,无缝地将更改应用于JSON对象的用途. 2.我想这样做是因为我现在拥有它所以UI完全按照轮询重新加载,无论是否发生变化,从UX角度来看基本上都是**.
我想如果我能找到两个对象之间的差异,我将启动一个函数,我将编辑特定于差异的UI.
在node.js中比较两个JSON格式的对象数据的最有效方法是什么?
这些对象不包含"undefined"或函数,它们的原型是Object.
我听说如果在node.js中有JSON,那么有很好的支持
为方便起见,我编写了一个简单的toJSON原型,用于处理我知道安全的JSON:
String.prototype.toJSON = function () {
return JSON.parse(this.valueOf());
};
Run Code Online (Sandbox Code Playgroud)
我在测试我的网络服务时使用它.不幸的是,即使这个简单的测试
var v0 = '{"echo":"hello_world"}'.toJSON(), v1 = {"echo": "hello_world"};
Run Code Online (Sandbox Code Playgroud)
它失败:
console.log(v0 == v1); // false
console.log(v0 === v1); // false
console.log(v0.echo == v1.echo); // true
console.log(v0.echo === v1.echo); // true
Run Code Online (Sandbox Code Playgroud)
我不知道导致这个问题的JavaScript是什么?
我有一套我已经添加了一个列表.
var a = new Set();
a.add([1]);
Run Code Online (Sandbox Code Playgroud)
现在我检查是否[1]存在于a:
a.has([1]);
> false
Run Code Online (Sandbox Code Playgroud)
根据规范,这可能会发生,因为如果要比较的两个对象的类型相同:
如果x和y引用同一个对象,则返回true.否则,返回false.
这也发生了:
[1] == [1];
> false
Run Code Online (Sandbox Code Playgroud)
因此,它可能是设置.has()用==比较平等的(不知道虽然)..contains()JS中的Set()有像Java一样的方法吗?
我在我的控制台中运行了以下行(一旦加载了jquery脚本),并收到以下结果:
$(this)
> [Window]
$(this) != $(this)
> true
$(this) == $(this)
> false
$(this) === $(this)
> false
Run Code Online (Sandbox Code Playgroud)
而且我不知道采取什么措施来弄清楚发生了什么.我的猜测是,有一些对象持有基于时间的值正在改变,但我想知道它是否有所不同.我会尝试在此期间比较这些值,但我希望有人可能会理解这里发生了什么.
编辑以解决我不知道$(arg)的底层实现的问题.我不知道它返回了一个新的引用对象.因此,我不相信这是"如何确定两个JavaScript对象的相等性?"的副本.
javascript ×7
json ×3
equality ×2
jquery ×2
arrays ×1
ecmascript-6 ×1
node.js ×1
object ×1
react-native ×1
reactjs ×1
set ×1
to-json ×1
typescript ×1