Carson

Carson 查看完整档案

填写现居城市  |  填写毕业院校Motion Magic  |  研发TD 编辑填写个人主网站
编辑

我回来了,看看segmentfault的环境吧,也许会留在这

个人动态

Carson 提出了问题 · 2019-08-07

document.createElement 不添加到body

document.createElement不添加到body和添加到document.createDocumentFragment 有什么区别

  1. document.createElement 不添加中body中页面看不到任何内容
  2. document.createDocumentFragment 按照官方手册的说明应该差不多是一个碎片内存

感觉没有添加到body中似乎也不会产生其他渲染的开销

关注 2 回答 0

Carson 提出了问题 · 2019-07-30

解决为什么要使用Object.keys(value).forEach

看到很多地方使用Object.keys(obj).forEach((key)=>...,为什么不直接使用for 迭代 obj

1. Object.keys(obj) //取得object到key值
.forEach((key)=>)    // 再循环迭代,通过箭头函数然后再obj[key]获得需要到内容
2. for(let i in obj) // i即key 

如此看来,方法2要简单到多,为什么还要用方法一舍近求远呢?感谢。

关注 2 回答 2

Carson 提出了问题 · 2019-07-30

解决为什么要使用Object.keys(value).forEach

看到很多地方使用Object.keys(obj).forEach((key)=>...,为什么不直接使用for 迭代 obj

1. Object.keys(obj) //取得object到key值
.forEach((key)=>)    // 再循环迭代,通过箭头函数然后再obj[key]获得需要到内容
2. for(let i in obj) // i即key 

如此看来,方法2要简单到多,为什么还要用方法一舍近求远呢?感谢。

关注 2 回答 2

Carson 赞了回答 · 2019-07-28

解决js中怎么理解按位取反?

第一位同学写的挺好的,但一开始我没太明白为什么这样计算😭,以下是学习做的笔记。

首先我们先要明白有符号整数,有符号整数的最高位表示的是符号位,0 为正数,1 为负数,例如(为方便理解,使用八位二进制):

// 十进制 => 原码
 3  =>  00000011
-3  =>  10000011

然后是反码,正整数的反码就是它本身(原码),负整数的反码是在其本身的基础上符号位不变,再把其余各位取反。

// 十进制 => 原码 => 反码
 3  =>  00000011  =>  00000011
-3  =>  10000011  =>  11111100

最后就是补码了,正整数的补码是它的原码,因此正整数的原码、反码、补码都是一样的;负整数的补码是在反码的基础上加 1 得到的。

// 十进制 => 原码 => 反码 => 补码
 3  =>  00000011  =>  00000011  =>  00000011
-3  =>  10000011  =>  11111100  =>  11111101

上面这些概念我们理解之后,取反就很好懂了;取反是在补码的基础上进行的,因此取反运算(~n)需要将整数转为补码,之后再取反,最后转换成原码。需要注意的是,正整数的补码取反之后符号位是 1,因此这个取反后的数是一个负整数,我们需要按照负整数计算补码的方式做逆运算得到原码,例如:

3  =>  00000011  =>  11111100  =>  11111011  =>  10000100  =>  -4
// 1. 十进制转换成补码(00000011),需要注意正整数反码和补码是它本身
// 2. 对补码进行取反(11111100)
// 3. 把已经取反的补码转换成反码(11111011),补码转换成反码的公式:反码 = 补码 - 1
// 4. 最后把反码逆运算转换成原码(10000100),逆运算的过程是反码的符号位不变其余各位取反
// 5. 此时,结果就是 -4

负整数取反:

-3  =>  10000011  =>  11111100  =>  11111101  => 00000010 => 2
// 1. 十进制转换成原码(10000011)
// 2. 原码转换成反码(11111100)
// 3. 反码转换成补码(11111101),公式是:补码 = 反码 + 1
// 4. 对反码进行取反(00000010),此时因为取反后的二进制数的符号位为 0,即表明这是一个正整数,上文说过正整数的反码和补码就是它本身,因此最终结果是 2

关注 3 回答 3

Carson 赞了回答 · 2019-07-28

解决js中怎么理解按位取反?

偶然看到这个问题,挖个坟。

按位取反的运算规则上面那位同学已经说的很好了,我补充三点:

  1. 按位取反的运算规则这么奇怪并不是JavaScript独有的,而是所有的计算机语言都是这样的。
    这样做的主要原因是为了为了统一减法和加法,在计算机中,减法会变成加一个负数,而负数会以补码的形式存储。而这样主要是因为补码和数字的十进制数有这么转换关系,负数:补码(x) = -x - 1,正数:补码(x) = x

  2. 因为补码是针对负数存在的,那么只要数据类型有无符号数,就没有这样的烦恼了,比如C语言有无符号整型,就能对无符号整型直接按位取反。

  3. 如果没有无符号类型,而且也只是想要按位取反,而不是附带补码的按位取反,需要另外的方法。
    让全1的数据和当前数据做按位抑或就行了。比如,你有一个32位的数据a,需要对它做按位取反,那么这样就行了:0xFFFF ^ a

var a = 0x8321;
console.log(a.toString(2));
console.log((0xFFFF ^ a).toString(2));

//1000001100100001
//111110011011110   => 左边最高位是0,被隐藏了。

关注 3 回答 3

Carson 赞了回答 · 2018-10-17

解决Web Notifications如何做到一打开浏览器就发送通知?

Service Workers

在网页按 F12,选择 Application 选项卡。

upload by justjavac

关注 1 回答 1

Carson 回答了问题 · 2018-09-27

解决vue 怎么动态绑定事件

vue是数据驱动,没有绑定事件的概念,如果非要说事件,你可以emit一个自定义的行为,通过v-bind之类的方法来使用

关注 5 回答 4

Carson 关注了问题 · 2018-09-27

解决[已解决]求小程序ui组件2018-12-11更新-终极解决方案

业务背景

利用mpvue开发小程序
想一次性让代码可以在小程序和网页上跑
不知道有什么合适的ui组件可以适配两个端的

尝试

  • weui
    这个是针对网页的,wxss里面不支持兄弟节点等东西,所以用不了
  • weui.wxss
    这个虽然能用,但是很多样式都被阉割了,并且没有文档,要边做边查官网源码,又要自己添加样式,很麻烦
  • mint-ui
    这个不能适配小程序,jscore不支持DOM
  • zan-uimint-ui
    因为是自定义的小程序组件,所以又没办法在mpvue里面用,并且无法适配网页
  • jq-weui
    是基于weui的,所以也没敢试..估计不行

问题

现目前,有没有这种ui组件啊,,找得吐血了快..

解决

暂时没有完美解决方案,期待后期饿了么的html端mintui进行小程序兼容或者有赞的小程序端zanui进行html兼容
目前相对可以使用的是基于weui改造的一个mp-weui.不过它也使用了很多小程序原生组件..具体参考:https://github.com/mpvue/awes... 这个网页中的mp-weui

2018-12-11更新

  • 现在出了很多通用的ui框架..
  • 但是出了一个更屌的...hbuilder才推出的uniapp
  • 不仅跨小程序和网页,还跨安卓和苹果
  • 不仅提供统一的ui组件,还提供统一的api

关注 9 回答 6

Carson 回答了问题 · 2018-09-20

nginx 403 forbidden , google 了 3 天还没搞定,请教同学们

错误信息不完整,error中是只是部分文件找不到,不过403错误肯定是权限问题引起的,检测下防火墙,nginx fast-php之类的运行身份,还有防火墙策略,还有适用到的文件访问权限。
尝试先只listen 127.0.0.1,关闭防火墙车辆,文件权限全部给到777,如果vi /etc/passwd 中存在apache用户,以apache身份运行试试,看看是否可以。

关注 4 回答 2

Carson 赞了回答 · 2018-08-20

解决请帮忙解答下下面几个疑惑

你可以改成

var add = (function() {
    var counter = 0;

    return function() {
        counter += 1;
        console.log(counter)
    }

});

add()();
add()(); //输出结果为1

首先add是一个立即执行函数表达式,在f1函数作用域里创建了变量counter,然后在f2的函数作用域上访问了f1词法作用域下的counter(就是所谓的闭包),一直访问的都是那一个。

var add=(function f1(){
        var counter=0;
        
        return function f2(){
        counter+=1;
        }
        
        })();
        
add();
add();//输出结果为2

关注 2 回答 1

认证与成就

  • 获得 43 次点赞
  • 获得 33 枚徽章 获得 0 枚金徽章, 获得 9 枚银徽章, 获得 24 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2012-11-13
个人主页被 640 人浏览