小编Pat*_*rts的帖子

有人可以解释WebRTC API文档吗?

所以我在WebRTC上找到了这篇W3文章,同时寻找一种方法来制作一个完全在浏览器中无需插件的视频聊天程序(并注意到MediaStream似乎只在Chrome中工作)据我所知.

对于那些熟悉这个API的人来说,我的问题非常简单.我想知道的是,在哪里可以找到具有使用此API的客户端的示例代码的文档,或者如果不存在,是否可以在当前规范下提供工作示例?要么是演示,要么只是一些"简单"代码连接到STUN服务器并演示此API的基本功能.

请注意,我不是要求弃用的客户端.例如,webkitPeerConnection不推荐使用,而webkitRTCPeerConnection在链接中指定,现在是当前的构造函数.

javascript video-streaming webrtc

4
推荐指数
1
解决办法
7948
查看次数

sprintf 等效于客户端 JavaScript

我知道它console.log至少支持printfC 语言的一些基本功能,但我很好奇一种利用console.log的实现来创建类似于sprintf. 我知道你不能简单地使用.bind或者.apply因为console.log实际上并没有返回字符串,所以有没有办法解决这个问题?

如果这实际上不可能,是否还有其他一些鲜为人知的本机实现,只需几行代码即可sprintf在 JavaScript 中实现?

对于那些不知道究竟sprintf是什么的人,这里有一些来自 tutorialspoint 的文档。我正在寻找的示例用法如下:

var string1 = sprintf("Hello, %s!", "world");
var string2 = sprintf("The answer to everything is %d.", 42);
Run Code Online (Sandbox Code Playgroud)

javascript binding printf

4
推荐指数
1
解决办法
5258
查看次数

为什么展开元素不适合复制多维数组?

来自 mdn:传播语法

注意:通常 ES2015 中的扩展运算符在复制数组时会深入一层。因此,它们不适合复制多维数组。Object.assign() 和 Object spread 语法也是如此。请查看下面的示例以更好地理解。

var a = [[1], [2], [3]];
var b = [...a];
b.shift().shift(); // 1
// Now array b is: [[2], [3]]
Run Code Online (Sandbox Code Playgroud)

上述声明的要点是什么?上面的代码示例与您使用 .slice() 方法将 a 中的数组复制到 b 中的工作方式相同。我尝试在此处向数组添加另一个维度:https : //repl.it/HKOq/2并且事情仍然按预期工作。

那么为什么传播语法不适合复制多维数组呢?

我很感激任何帮助。

编辑:

阅读 estus 和 vol7ron 的答案帮助我弄清楚了。基本上,正如 estus 在技术上指出的那样,数组内部只有数组,而不是多维数组。

正如 vol7ron 所解释的,只有数组的第一级被复制,因此内存中的对象对于任何进一步的嵌套元素都保持不变。

我也错误地怀疑使用扩展语法应该与切片运算符的行为有任何不同

javascript arrays ecmascript-6 spread-syntax

4
推荐指数
2
解决办法
5040
查看次数

传播功能意味着什么.正常函数是否可以在javascript中迭代

我在控制台中执行类似下面的代码

function add(a,b){return a+b;};
const obj = {...add};
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是它没有抛出错误.也没有

const obj = {...123};
Run Code Online (Sandbox Code Playgroud)

扩展语法应该只适用于可迭代的实体,如对象,数组,字符串,映射,集合等.那么为什么在使用不可迭代的实体时它不会抛出错误?或者我在这里遗漏了什么?

javascript ecmascript-6 spread-syntax

4
推荐指数
1
解决办法
78
查看次数

Vue 将对象作为计算属性展开

我的组件中有一个名为 的对象数组config和一个currentIdx属性。然后我发现自己需要这样做:

computed: {
    textStyle: function() {
        return this.config[this.currentIdx].textStyle;
    },
    text: function() {
        return this.config[this.currentIdx].text;
    },
    key: function() {
        return this.config[this.currentIdx].key;
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试将所有功能替换为:

computed: {
    ...this.config[this.currentIdx]
}
Run Code Online (Sandbox Code Playgroud)

它通过了编译,但我在浏览器控制台中出现错误。我认为问题在于computed需要函数,但扩展语法 (...) 返回对象。所以,我的问题是:在这种情况下,有没有办法减少重复?

谢谢!

javascript ecmascript-6 vue.js spread-syntax vue-cli

4
推荐指数
1
解决办法
8475
查看次数

如何在 TypeScript 中创建一个适用于数字和字符串的通用加法运算符

在学习 TypeScript 中的泛型时,我想尝试重新创建以下 JavaScript:

function add(x, y){
    return x + y;
}
Run Code Online (Sandbox Code Playgroud)

我试过:

type StringOrNumber = string | number;

function add<MyType extends StringOrNumber>(x: MyType, y: MyType): MyType {
    return x + y;
}
Run Code Online (Sandbox Code Playgroud)

此错误与:

error TS2365: Operator '+' cannot be applied to types 'MyType' and 'MyType'.
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?我假设它MyType可以是一个字符串或一个数字,一旦“选择”TypeScript 就会知道它是添加两个字符串两个数字。

generics type-inference operators type-constraints typescript

4
推荐指数
1
解决办法
931
查看次数

Spread语法返回意外对象

我正在使用节点,我已经使用过.

巴贝尔节点

    "start": "nodemon --exec babel-node --presets es2015 index.js"
Run Code Online (Sandbox Code Playgroud)

我的传播语法没有按预期工作.这是我的代码.

   export const login = async (parentValue, { email, password }) => {
  try {
    const user = await User.findOne({
      email
    });
    console.log(user);

    if (!user.authenticateUser(password)) {
      throw new Error('Wrong password');
    }
    const dummyObject = {
      ...user
    };
    console.log({ dummyObject });
    return { ...user };
  } catch (e) {
    console.log(e);
    throw new Error(e.message);
  }
};
Run Code Online (Sandbox Code Playgroud)

我使用的线console.log(user),它工作正常.它回来了 { id: xxx, name: xxxx }

我得到了意想不到的数据console.log(dummyObject); 这就是我得到的.

{ jojo: 
{ '$__': …
Run Code Online (Sandbox Code Playgroud)

javascript node.js spread-syntax

4
推荐指数
1
解决办法
327
查看次数

bcrypt.compare() 是异步的,这是否意味着一定会发生延迟?

我正在使用bcryptjs包来散列和比较密码。

下面使用的方法compareSync是同步的并返回一个布尔值。它可靠且按预期工作。

let trueOrFalse = bcrypt.compareSync('abcd', '1234');

if(trueOrFalse) {
    console.log('hooray, it was true');
} else {
    console.log('oops, it was false');
}
Run Code Online (Sandbox Code Playgroud)

下一个示例使用异步compare方法。我担心,因为这个版本是异步的,如果服务器上有任何延迟,它可能会在确定 的值if/else之前到达语句。这是一个合理的担忧还是我误解了这种类型的异步函数的本质?bcrypt.compareres

let trueOrFalse;
bcrypt.compare('abcd', '1234', function(err, res) {
    trueOrFalse = res;
}

if(trueOrFalse) {
    console.log('hooray, it was true');
} else {
    console.log('oops, it was false');
}
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous bcrypt node.js

4
推荐指数
1
解决办法
8792
查看次数

这学期刚开始学C,但是这个问题我好像没看懂教授要我们问什么

原问题:

正数在一个补码和二进制补码中具有相同的表示。假设它的表示被解释为二进制补码,并且它的加法逆是确定的。现在这个表示被解释为一个补码,并且确定了加法逆。无论是解释为一的补码还是二的补码,结果都是一样的,因为它是一个正数。这个结果和原来的数字有什么关系?

我不知道他说的“这个结果和原来的数字有什么关系”是什么意思。我想我明白他要我们做的过程:

首先取二进制(0101),然后取二进制补码(1011),然后取二进制补码的二进制补码(0100)。接下来是什么?

c twos-complement ones-complement

4
推荐指数
1
解决办法
143
查看次数

反应:[useRef,scrollIntoView,] 如何只自动滚动溢出页面内的特定 div?

正如你在我的例子中看到的

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

function App() {
  const items = ["this", "that", "those", "them", "these", "thisins"];

  const messagesRef = React.useRef(null);
  const scrollToBottom = () => {
    messagesRef.current.scrollIntoView({
      behavior: "smooth"
    });
  };

  React.useEffect(() => {
    if (messagesRef.current) {
      scrollToBottom();
    }
  }, [messagesRef]);

  return (
    // Page is overflowing, set height to mimic a full page
    <div className="App" style={{ marginTop: 70, height: 800 }}>
      {/* now set this div to overflow scroll with a small height */}
      <div …
Run Code Online (Sandbox Code Playgroud)

javascript scroll reactjs js-scrollintoview react-hooks

4
推荐指数
1
解决办法
7538
查看次数