分类
未分类

一百万种成为穷人的方法

分类
未分类

搜集图片的方法

1、通常我们喜欢通过搜索引擎来搜索图片:谷歌、百度、BING

2、专业的素材网站:比如freepik pexels pixabay

3、一些比较难搜集的,可以尝试通过以前 的电脑网,里面有很多器材样张,比如搜集鄂州或者梁子湖这样冷门的风景相关的关键词

4、poco这个神奇的网站,以前可不是黄色网站吗?

5、有条件的话不要忘记了flickr,搜索一下可能会有意想不到的效果

6、花瓣应该也可以,但是有时候修熬过不理想

分类
未分类

JavaScript学习笔记3:计算器案例代码分析

1、今天尝试完成昨天遗留的计算器作业,没想到进入太多的坑。

  • 关于document.getElementById(‘ID’).value方法需要注意的情况
  • onclick、onchange等事件的触发机制
  • 浮点数的运算精确度

下面通过代码片段来慢慢解释:

关于document.getElementById('ID').value

//html
<div id="caculator">
   <input type="text" value="123456" id="test" />
</div>

//js代码1
console.log(test);//输出<input type="text" value="123456" id="test" />

🔺变量test虽然没有被定义,但是test是html元素的ID,在这种情况下js默认输出该ID所包含的元素块(见图片1);如果此时使用alert(test)或.innerHTML来进行输出其value的话,输出的字符为:[object HTMLInputElement]或者类似;如果页面中没有test这个Id的HTML元素的话,控制台能看到报错信息:Uncaught ReferenceError: test is not defined.

//js代码2
var test = document.getElementById('test').value;
function charTest() {
    console.log(test);
}
charTest();//输出123456
🔺变量test与Html元素Id相同,但是这里被重新声明过了,用来指代该元素的value,所以才能输出数值字符串;
🔺算然声明定义了test变量,但是该变量依托HTML页面中ID为test的元素块的内容;如果该ID被删除或者改写,控制台中仍然会报错:Uncaught TypeError: Cannot read property 'value' of null。这应该是value方法的缘故吧。
 
图片1:页面HTML标签中的ID,若没有单独重新声明,该ID指代该ID下的整个HTML块
下面贴出整个计算器页面布局的HTML部分:
<div id="caculator">
    <input id="num1" type="number" value="0" placeholder="请输入第一个数字" />
    <br>
    <input id="num2" type="number" value="0" placeholder="请输入第二个数字" />
    <br>
    <button id="jia" type="button">➕</button>
    <button id="jian" type="button">➖</button>
    <button id="cheng" type="button">✖</button>
    <button id="chu" type="button">➗</button>
    <br>
    <p>计算结果为:<span id="result"></span></p>
</div>
图2:以上HTML代码获得计算器显示效果(代码不包含CSS样式)
//下面贴出该计算器可运行的js代码块
var data1 = data2 = 0;
document.getElementById('num1').onchange = function() {
    data1 = document.getElementById('num1').value * 1;
};

document.getElementById('num2').onchange = function() {
    data2 = document.getElementById('num2').value * 1;
};

document.getElementById('jia').onclick = function() {
    calculator('+');
}
document.getElementById('jian').onclick = function() {
    calculator('-');
}
document.getElementById('cheng').onclick = function() {
    calculator('*');
}
document.getElementById('chu').onclick = function() {
    calculator('/');
}

function calculator(method) {
    console.log(data1, data2);
    switch (method) {
        case '+':
            document.getElementById('result').innerHTML = parseFloat((data1 + data2).toFixed(100));
            break;
        case '-':
            document.getElementById('result').innerHTML = parseFloat((data1 - data2).toFixed(100));
            break;
        case '*':
            document.getElementById('result').innerHTML = parseFloat((data1 * data2).toFixed(100));
            break;
        case '/':
            document.getElementById('result').innerHTML = parseFloat((data1 / data2).toFixed(100));
            break;
    }
}

一个需要注意的问题是,这里的onchange和onclick不是直接写在HTML标签元素上的,也就是没采用下面这样的样式:

<input type="number" onclick="alert('Hello World!');" />

而是使用了类似下面的样式:

document.getElementById('ID').onchange = function(){}

这里面onchange\onclick事件写法不同会产生不同的结果

    <input id="btn" type="button" value="点我弹窗" onclick="alert('hello world')">

🔺上边的写法是单独在元素中绑定事件,这样写是有效的;但是就目前来说,为了SEO效果一般不推荐这么写了

▼如果通过引入的方式来写,则需要写成如下样式,并且在上面的HTML标签里面删除已经绑定的onclick事件,否则因为同时执行两个事件,JS会不做任何操作,即使两个事件是完全相同的。

    <script>
        document.getElementById("btn").onclick = function() {
            alert('hello world');
        }
    </script>
🔺但是有一个疑问上面的为何不能直接写成下面的样式:
document.getElementById("btn").onclick = alert('hello world');
//当使用上面的写法时,alert在HTML文档打开之后就立即执行了,而不是依托于onclick事件,难道这个=号右边的alert方法被当成了赋值?而.onclick被当成了一个对象属性?下面再写一个例子来验证:

var e = '';
var getSum = function(e) {
        alert('你的名字是:' + e );
    } //在使用function(){}包裹之后 alert并没有运行;此时getSum的类型是function,!!!!!是需要等待被执行的!!!!!!

var getSum = alert('我来进行求和运算');//解除function(){}包裹之后,alert在文档载入后就立即运行了。此时getSum的类型是undefined;有没有他无所谓;alert本身不是一个值,与prompt不同,prompt可以进行赋值,与之对应的对象类型是string;

可能我需要了解function这个关键字的含义和用法?事件绑定在标签元素上和作为引用的写法有所不同。上面的例子如果是下面的写法,则能够与事件绑定,达成要求的效果。

<input id="btn" type="button" value="点我弹窗" onclick="getSum('张三')">

以上总结,promptalertconsole等输入输出方法可以直接运行,前面也可以加变量,但是除了prompt之外,另外两个输出的方法加变量似乎没有什么意义。onclick事件的使用方法见 this page,引用的方法如下2种:

object.onclick = function(){ 
     // my script;
}
或者:
object.addEventListener('click',myScript);//IE8及更早不支持

最后是关于浮点运算的,之前看到的在加法运算时乘以10再除以10的方案局限性太明显,只能用在小数点后一位吧?现在可以用tofix()来解决这个问题了,使用的方式参照parseFloat((运算表达式).toFixed(10))10代表小数点后取的位数。

分类
未分类

JavaScript 学习笔记2

1,逻辑与的短路运算123&&456 数字除了0都为真,遇真继续执行,遇假则短路返回当前假值,所以输出456; 如果是0&&456,则输出0

2,逻辑或的短路运算,遇真则返回最初的真值,全假则返回最后的假值

        console.log(123 && 456 && 567 && 789); //789
        console.log(123 || false); //123
        console.log(null || undefined || 0 || NaN || "你好"); //你好
        console.log(0 || undefined || NaN); //NaN


        console.log(1 - 2 && 5 * 3); //15
        console.log(123 * 0 && 98 + 89); //0
        console.log(123 * 0 || 98 + 89); //187

下面的结果受到逻辑或短路运算的影响,还要注意自增运算的特殊情况:

        var num = 1;
        console.log(123 || num++); //?
        console.log(num++); //?
        console.log(num); //?

下面终于想到了一个逐步按键递增的方案:后面学习也许可以继续优化

<input type="button" value="每次按我增加1" id="btn">
<br>
<span id="num"></span>

        var age = 2;

        document.getElementById("btn").onclick = function() {
            var val = document.getElementById("num").innerHTML;
            console.log(val);
            val = val * 1;
            if (Boolean(val) == 0) {
                document.getElementById("num").innerHTML = autoNumber(age);
            } else {
                document.getElementById("num").innerHTML = autoNumber(val);
            }

            function autoNumber(num) {
                num++;
                return num;
            }

        }

3,赋值运算符=,+=,-=,*=,/=,%=

4,取余运算小练习


        var year = prompt("请输入年份");
        if (year % 4 == 0 && year % 100 !== 0 || year % 400 == 0) {
            alert(year + "年是闰年");
        } else {
            alert(year + "年是平年");
        }

5,三元表达式:5>9?’学好了’:’没学好’ 输出没学好。表达式是有返回值的。Pink老师的案例,有人问如果输入06会咋么样?会输出006,所以我们需要对输入的数字取整即可。同时要明白prompt输入的字符串数字,在参与运算时是当做数值看待的

        var time = prompt("输入数字");
        time = parseInt(time); //取整
        time = time < 10 ? '0' + time : time;
        alert(time);

6,for循环是循环语句的王者(其他还有while 和do while),其结构如下:

        for (初始化变量, 条件表达式, 操作表达式) {
            //执行语句:循环体
        }
        //例子:判断执行顺序
        for (var i = 1; i <= 100; i++) {
            console.log("你好吗?");
        } //初始值>条件表达式>循环体>操作表达式>条件表达式>循环体>操作表达式>……

7,断点调试,观察for循环的运行过程

        //代码学习
        var even = odd = 0;
        for (i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                even += i;
            } else {
                odd += i;
            }
        }
        alert("所有偶数的和是" + even);
        alert("所有奇数的和是" + odd);
        //算班级成绩:
            var score = 0;
        var num = prompt("输入人数");
        for (var i = 1; i <= num; i++) {
            score = score + parseInt(prompt("请输入第" + i + "位学员的成绩")); //也可以用乘除法
        }
        console.log("班级总成绩为" + score);
        console.log("班级平均成绩为" + score / num);

8,循环语句while 以及do while

        var num = 3;
        初始化变量
        while (num < 5) { //条件表达式
            //循环体
            num++; //操作表达式
        }
        alert();

        var num = 3; //初始化变量
        do {
            //循环体
            num++; //操作表达式
        } while (num < 5); //条件表达式
        alert();


        // while比for更灵活一些,可以用在更复杂的条件下;
        // 在数字重复计算更推荐for;
        // while可能从未被执行,而do while则至少被执行一次。  

9,continue 和break: continue 跳出当前次的循环执行下一循环;break是退出当前及之后的所有循环;当我使用while语句和do while语句练习下面的案例时出现了一个不报错的问题:

        var sum = 0,
            i = 1;
        while (i <= 100) {
            if (i % 7 == 0) {
                continue;
            }
            sum += i;
            i++; //如果i++放在这里,这个程序是不能正常运行的,因为i++并没有被执行,i的值没有变化,这里其实一直在continue
        }
        console.log(sum); //无法输出,一直运行

正确的代码应该如下面这样,才能得到正确的结果:

        var sum = 0,
            i = 0;
        while (i < 100) {
            i++;//避免被continue跳过
            if (i % 7 == 0) {
                continue;
            }
            sum += i;
        }
        console.log(sum); //4315

        var sum = 0,
            i = 0;
        do {
            i++;//避免被continue跳过
            if (i % 7 == 0) {
                continue;
            }
            sum += i;
        } while (i < 100);
        console.log(sum); //4315

为什么for循环不会报错呢?for循环中的操作表达式(i++)不是循环体的一部分,但是do while 和while确是。

分类
未分类

Javascript学习笔记

晚间听课了IT黑马的Pink老师,讲的是JavaScript

有几处需要注意的地方:

1,其他类型转字符串的三种方式(32集) 变量.toString() String(变量) 变量+字符串=>隐式转换

2,字符串转数值型(33集) parseInt(变量) -取整 不45 parseFloat(变量) Number(str) 还有隐式转换 */-

3,其他函数 Boolean() isNan() 转义换行符号\n \\ \b \t \” \’

4,辅助工具:在VSCode中安装js/css/html formatter 插件

5,浮点数运算 转换成二进制之后会不精确。所以小数的运算结果不能精确比较

6,取余运算=取模运算符判断是否被整除

7,递增和递减运算符:摄像头前置则先运算后返值,后置责则先返回值后运算。++ 和 –要看是否单独使用 e++ 和++e都是表达式

8,双等于号== 默认会把字符串数字转换为数字型进行比较,18==’18’ 所以才会有===的存在 9,js中function 可以自己嵌套自己;这里要理解js是一种脚本语言,一行一行的去执行。这里回忆IT黑马Pink老师的理解方式。var 变量名是申请房间(申请内存);= 是给变量赋值(进驻内存);此外可以理解一下下图中isNaN()和Boolean()用作判断依据 观察下面红框部分的代码,使用while 替代了if,内部构造也相应调整。这里说一下我理解的if和while的区别。if的条件只被执行一次,所以前面的一张图调用num()用以循环;而while则是循环执行,直到条件被满足为止,相比之下,这两图的案例使用while可能会更好一些。 继续将功能进行调整,每一次输入都进行检测是否是数字,优化后的代码如下。注意判断条件改成了Boolean(val*1)==false; 之前使用isNaN()两个输入值相互进行乘法运算来判断,但是会漏掉两个空字符串相乘则会得出数字0的情况;参见在数学运算中使用 NaN 会始终返回 NaN  

var caculator = function(){var data =”}这种可以用calculator.data调用吗

分类
未分类

确认华为P40系列不支持谷歌服务,鸿蒙HMS或将撑起华为新旗舰海外销量!

受到美国禁令的影响,2019年华为手机海外出货量大幅度下滑,未能完成实现全球手机销量头把交椅的目标。2月24号,华为宣布新一代旗舰Huawei P40系列将于3月26号在巴黎推出。早前谷歌公司发布的声明说,美国政府禁令将继续影响华为推出的新设备。

美国政府MMP,打扰我赚钱搞毛啊?!!华为兄弟,不要用HMS挖我墙角啊,我快站不住了!

历经2019年的各种压力,华为手机国内销售份额大幅提升,增长率达到了28%。华为对国内市场的依赖度不断增强,在所有中国手机品牌中,华为(含荣耀)占据了中国5G手机市场74%的销量。有消息称,华为P40系列可能会与基于Android 10 的EMUI 10.1一起发布,海外版本的P40和P40 Pro无法提供Google应用和服务,不过华为已经推出了自己的解决方案。

华为移动服务(HMS)将被打造成Google GMS的有力竞争对手,目前已寻求TomTom等公司提供地图服务,并推出了自己的应用分发系统HUAWEI AppGallery。即使取消禁令,华为也可以在没有谷歌的情况下继续进行。但需要注意的是,对中国市场的高度依赖使华为成为2020年肺炎疫情”黑天鹅”事件影响最大的手机品牌。分析机构预测,2020年第一季度,中国手机销量预计下降20%以上。同时由于2019年华为手机销量的大幅度增加,品牌需求存量必然会被相对售价更低廉的老旗舰消化,华为P40新旗舰的购买需求能否持续保持强劲,对此您是怎么看的呢?

原标题:谷歌禁令以及肺炎疫情下的华为新旗舰

谷歌解释了为什么其应用程序不会在华为的P40手机上使用

华为禁令:完整的时间表,因为Google警告不要在P40手机上横向加载其应用

Answering your questions on Huawei devices and Google services.

分类
未分类

关停韩国本土工厂!新冠肺炎肆虐韩国,三星折叠屏新旗舰Galaxy Z Flip产能或受挑战!

根据路透社早前的消息 , 三星在韩国本土的一间工厂,因员工被确诊冠状病毒,该员工工作的楼层被迫关停直到2月25号,所有与该名员工有接触的同事,都将在家进行隔离,并检验是否感染。该工厂地处韩国大邱市西北的龟尾市,主要生产内销韩国国内的高端手机,同时也生产Galaxy Z Flip和Galaxy Fold这类产量相对稀少的机种。

目前中国的冠状病毒疫情,因为严格的隔离措施而逐渐趋缓,但在日本、韩国、伊朗、意大利等国家,却突然变得严峻起来。特别是在韩国出现了大规模的群聚感染,并且迅速扩散。虽然三星工厂的停工时间不长,但高度智能化的生产线仍然需要有人值守。韩国作为全球消费电子供应链巨头的大本营,如果无法快速有效控制疫情,停工将会变得更加普遍,甚至不得不进行更为激进的限制措施。届时受影响的不仅是手机产能,其他科技产品和零组件都有可能受到牵连。对此,您是怎么看的呢?

虽然中国的冠状病毒疫情因为严格的封阻移动,而在近几天逐渐趋缓,但世界其他国家,像是韩国、伊朗、意大利等,却突然开始严峻了起来,特别是韩国出现了大规模的群聚感染,并且快速扩散。三星是最新一间「中标」的公司,由于一名员工被确诊冠状病毒,因此被迫暂时关闭了一间位于大邱市西北方的龟尾市的手机工厂。该名员工所有有接触的同事都将在家进行隔离并检验是否染病,同时其工作的楼层将至少关闭到 25 日。

三星在龟尾的工厂主要以内销的高端手机为主,但也包括了 Galaxy Z Flip 和 Galaxy Fold 等产量稀少的产品。停工的日子虽然不多,但对于本来就稀缺的机种来说,想必影响也是不少的。更麻烦的是,如果韩国这一波无法控制住疫情的话,不仅是停工可能会变得更普遍、甚至可能不得不进行更激进的限制措施。届时不仅是手机而已,其他科技产品乃至于零组件都有可能会受影响吧。

来源: Reuters

https://www.reuters.com/article/us-china-health-southkorea-samsung-elec/samsung-electronics-confirms-coronavirus-case-at-phone-factory-complex-in-south-korea-idUSKCN20G0CG

翻译参考:

https://cn.engadget.com/cn-2020-02-22-samsung-shuts-down-phone-factory-over-coronavirus.html

新冠病毒祸害世界
http://www.rfi.fr/cn/%E4%B8%AD%E5%9B%BD/20200223-%E6%96%B0%E5%86%A0%E7%96%AB%E6%83%85%E7%A5%B8%E5%AE%B3%E4%B8%96%E7%95%8C

https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6

分类
未分类

近在咫尺!海外媒体传出华为P40手机发布日期和价格信息

进入新一年的2月份以来,安卓手机阵营相继迎来了三星galaxyS20和小米10系列,手机性能配置和特色功能不断刷新升级。相信很多国产手机玩家,仍然在期待华为新一代旗舰P40 Pro的发布。早前华为消费者业务总裁余承东确认,华为P40系列,将于2020年3月份在法国巴黎推出。根据海外媒体的相关消息,这一具体时间为3月26号,不过该日期仍然有待官方确认。

在价格方面,P40系列的海外起售价为699英镑(约合6400元人民币),而P40 Pro的海外起售价为899英镑(约合8200元人民币)。同时有传言称华为将会推出一个P40 Pro的高配版——P40 Pro Premium Editon,该版本将配备后置5摄成像系统,和支持120hz刷新率及2k分辨率的弧形屏幕。P40 Pro Premium 版,将作为前作保时捷版本的替代品,势必会推高华为旗舰价格的上浮空间。对此,您是怎么看的呢?

分类
未分类

资讯Vlog音乐选择

手机资讯的背景音乐:

科技时政类的背景音乐:BBC World 2013 Countdown

分类
未分类

又要对华为下手了,这次针对的是华为的供应商

https://www.reuters.com/article/us-usa-huawei-tech-tsmc/u-s-mulls-cutting-huawei-off-from-global-chip-suppliers-with-tsmc-in-crosshairs-idUSKBN20B1YO