由Number引发的思考:如何判断用户输入的值是否为纯数字?
问题回顾最近在阅读现代JavaScript教程, 在Number这一章节中有这么一个任务:
要求程序接收用户输入的一个值,并且只有当这个值为数字的时候才能通过,这其实就是如何判断一个字符串是纯数字。在Python中,只需要调用str.isdigit(), 或者使用try except就可以解决这个问题,但是在JavaScript中,好像并没有一个方便的函数来处理这个问题,并且对一个非数字的字符串强制转换为数字并不会引起错误,所以无法通过捕获异常来进行处理。
网上搜索通过搜索这个问题,我意识到,网上的答案真的是鱼龙混杂,有的完全不靠谱,却还排在很前面,让你第一个看到,简直就是浪费时间。下面的这些答案多多少少都有问题,我会在后面一一指出:
答案一:12345678function checkInp() { let x = prompt('Enter a number:') if (isNaN(x)) { alert("Must input numbers"); return false; } ...
React-事件回调函数this指向问题
初学React时,往往会被组件中的事件回调函数中的this指向问题搞得头晕。本文是我的一些自言自语,希望自己能给自己讲清楚这个问题。
问题分析故事的开始要从这个错误说起:
无法从undefined中读取值?
来看看源代码:
123456789101112131415161718class Toggle extends React.Component{ constructor (props) { super(props); this.state = {isOn: true}; } render() { return ( <h1 onClick={this.switch}>{this.state.isOn ? 'On' : 'OFF'}</h1> ) } switch () { // 通过上面的报错,问题显然出在这里! this.setState( ...
JavaScript-[事件]-学习与总结
JavaScript与HTML的交互是通过事件实现的,事件代表文档或浏览器窗口中某个有意义的时刻。
注册与解绑事件传统方法在JavaScript中指定事件处理程序的传统方法是**把一个函数赋值给DOM元素的一个事件处理程序**。
事件处理程序的名字以on开头,因此click的事件处理程序叫做onclick;
1234let btn = document.querySelector('button');btn.onclick = function() { alert('Clicked!');}
同理,如果想解绑一个使用传统方法设置的事件,只需要把事件处理程序赋值为null。
1btn.onclick = null;
唯一性:同一个DOM元素对于同一事件只可以设置一个处理函数。
监听注册方式(推荐)DOM2 为事件处理程序的赋值和移除定义了两个新方法: addEventListener() 和 removeEventListener()。
element.addEventListener(type, liste ...
Git基础教程2 -【查缺补漏】
当我重读廖哥的Git教程时发现之前没注意到的一些命令和技巧,本文是作为Git基础教程1的补充,若想要了解Git的核心思想和方法,还请阅读之前的文章。
Fast Forward 模式
当master分支在创建dev分支之后并未产生任何新的commit,此时的合并就叫Fast Forward。
但在Fast Forward模式下,删除分支后,会丢掉分支信息。
如果想要保留分支信息,就需要强制禁用Fast Forward,此时Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下图为Fast Forward和no Fast Forward的对比图,非常直观:
想要强制禁用Fast Forward模式非常简单,只需要在merge命令后添加--no-ff,并且附上commit的名称:
1$ git merge --no-ff -m "merge with no-ff" dev
实战一下, 使用git log --graph看看提交后的效果:
果然,无论是在终端还是在开发工具中,都可以看到强制禁用Fast Forward模 ...
Linux 基础命令2•用户/组和权限管理
用户是Linux系统工作中非常重要的一环,用户包括用户与组管理。 同时,权限也是Linux的一个核心概念,Linux可以对一个用户设定权限,对一个组设定权限,甚至还可以对一个文件或目录设置权限。
了解用户权限Linux将权限分为三部分:读、写与执行,详细见下表:
权限
缩写
代号
读(read)
r
4
写(write)
w
2
执行(execute)
x
1
通过ls -l命令可以查看不同用户和组对文件和目录的权限:
在之前的文章中,我们已经学会使用ls命令,但却没有关注前面的这些参数,其实它们非常重要~
现在我把上图中用红色框框起来的部分整理出来:d rwx r-x r-x kelvin kelvin
可能现在看这一串字符会毫无头绪,但请听我慢慢讲给你~
第五个红框中的kelvin代表当前文件或目录的拥有者,因为这是我创建的文件夹,而我的用户名为kelvin所以我便是这个文件夹的拥有者;
第六个红框代表所属用户组,系统默认创建的组与用户同名,因为我的用户名是kelvin所以系统自动创建了一个名为kelvin的组,并将我加了进去。
第一个红框中的d代表这 ...
SSH基础知识1 -【登录到远程服务器】
什么是SSH?SSH(Secure Shell)正如其名,它是一种网络协议,用于加密两台计算机之间的通信,它主要用于保证远程登录和远程通信的安全。
有兴趣的同学可以先看看下面这个视频,大致了解一下SSH:
基本用法安装SSH客户端Linux系统一般都自带有ssh(SSH客户端),如果没有的话需要手动通过命令安装:
12345# Ubuntu 和 Debian$ sudo apt install openssh-client# CentOS 和 Fedora$ sudo dnf install openssh-clients
安装完成后可以使用ssh -V来查看ssh版本,检查ssh是否安装成功。
连接远程服务器ssh连接远程服务器的基本命令为:
1$ ssh user@hostname
user: 想要登陆的用户名;
hostname: 可以是IP、域名,也可以是局域网内部的主机名;
假设我想连接到192.168.56.111(www.codingkelvin.fun) 中的kelvin用户,我可以用这两种方式:
12$ ssh kelvin@192.168.56.11 ...
Git基础教程1 -【本地版本控制】
Git是什么?
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git是一个免费的、开源的分布式版本控制系统,旨在以快速高效的方式处理从小型到大型的所有项目。
什么是版本控制工具?为什么需要版本控制工具?不论是在开发过程中或是日常办公中,版本控制都是不可忽略的一环,每一次代码版本的迭代都应该记录在日志中,并且能随时在版本之间穿梭。其实在使用版本工具之前,大部分朋友也都有了版本控制的思想,比如说下面这位:
虽然说这确实是一种版本控制的方法,但效率极低,也只可能用于个人。软件工程绝大多数需要团队合作开发,所以就更需要一个方便可靠的版本管理工具来管理整个团队的项目。
集中式版本控制工具集中式版本控制工具需要一台集中管理的服务器,这台服务器里存储了程序所有版本的完整信息,而每一个团队内的人员需要连接到这台服务器取出最新的程序版本 ...
先别着急写代码! 画个流程图试试看~
什么是流程图?
程序流程图又称程序框图,是**用统一规定的标准符号描述程序运行具体步骤**的图形表示。
为什么要画流程图?也没什么好解释的,画就对了。有些一下子想不出来的逻辑,就得动笔画画图才能捋清逻辑。比如计算两个日期之间差了几天,有那么多种情况要考虑,如果一边写一边考虑,大概率会翻车,但是如果现在纸面上把逻辑梳理通顺,再把纸面上的照搬到代码上,基本上不会出现问题。有一些很主观的见解,我一直觉得编程和写代码这两件事不太一样,编程更偏重于对程序结构和算法的设计,而写代码只是将已经设计好的程序写成代码,前者难度要远远高于后者,而画流程图就可以很有效地提高程序设计的效率。
怎么画?流程图中有一些规定好的符号来表示逻辑,见下表:
在哪画?在线Flowchartdraw.io是一个开源免费的流程图工具,可以在线使用,也可以下载到本地。
使用VSCodeDraw.io还提供了VSCode的插件,只需安装这两个插件,并且新建一个后缀名为.drawio的文件即可在VSCode中创作流程图。
一些例子
找出四个数字中最大的数
计算阶乘
判断是否是质数
Linux 基础命令1•基本文件和目录操作
终端命令基础终端命令格式command [-options] [parameter]
command 命令名称
[-options] 选项,可以省略
parameter 参数,可以是零个,一个或多个
终端命令帮助command --help
通过内置查询参数查询命令帮助
man [parameter]
在文档中查询指令帮助
command --version
显示版本信息
开关机重启命令shutdown [-options] time [message]
用来系统关机命令。shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。
-r:shutdown之后重新启动;
-h:将系统关机;
-c : 取消目前已经进行中的关机动作;
time : 设定关机的时间;
message : 传送给所有使用者的警告讯息;
123$ shutdown -h now # 立即关机$ shutdown -h 10 # 10分钟后关机$ shutdown -r now # 立即重启
文件和目录命令pwdpwd
显示当前工作目录的绝对路径
ls ...
DSA in Python - Recursion【递归】
开始前,先看几个关于递归的玩笑:
In order to understand recursion, one must first understand recursion.
Reminds me of what happens when you google “recursion”
I like my coffee like I like my coffee……
The recursive centaur:
什么是递归?一个最简单的例子,俄罗斯套娃。想要完全展开一个俄罗斯套娃,就需要不断重复拆开大的拿出小的,直到拆到最小的为止。 没错,俄罗斯套娃已经包含了递归最基本的两个特征:重复操作 和 结束条件。
下面用简单的几句话来描述一下递归的特点:
Making problem smaller and smaller.
Performe the same operation mutiple times.
Ever step have smaller input to make problem smaller.
Base condition is needed to ...