如何学习JS?

JavaScript09

如何学习JS?,第1张

一、学js的条件:

学习JS也是有门槛的,就是你的html和css至少还比较熟练,您不能连<body>这东东是干啥的都不知道就开始上JS了,学乘除前,学好加减法总是有益无害的。

二、忠告

1,不要着急看一些复杂网页效果的代码,这样除了打击你自信心,什么也学不到

2,别急着加技术交流QQ群,加牛人QQ。

3、看网上什么多少天精通JS,啥啥啥从入门到精通,这种教程直接跳过吧,太多的事实证明,以一种浮躁的心态去做任何事都会以失败而告终。

4、千万别去弄啥电脑培训,花了钱和时间不说,关键是学不到东西。本来你买两本好书自学3个月能学会的,他们硬是能折腾你两年。

javascript:

1、同义词 js(Javascript)一般指javascript。

2、JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。

3、它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

4、在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。

之前对js的一些涉及到二进制的运算符一直似懂非懂,看到了就一脸懵逼,还得去控制台算一下。然后最近看算法的时候又看到了这个运算符,这里就简单介绍一下学习这些位运算符的过程。

注意: 以下运算均不涉及到小数。

先说这句话是什么意思。左移位是二进制的一种运算,就是在不改变二进制数值32位长度的前提下,将每位的数字都向左移动,左边移出去的直接丢弃,右边空出来的位置用0填充。无符号就是保持符号位不变,即本来是正数,移位后一样为正数。

这里以 7 <<2 为例。

首先将7转为二进制是 0000 0000 0000 0000 0000 0000 0000 0111 .

然后对其向左移两位.

得到值为 0000 0000 0000 0000 0000 0000 0001 1100 .

转换为十进制为 28.即 7 <<2 = 28 。

然后我们对以上的运算过程做一个处理,将这些二进制转换为我们熟悉的十进制。

对移位后的算式进行合并项可得到 2^4 + 2^3 + 2^2 = (2^2 + 2^1 + 2^0) * 2^2 ,即 2^4 + 2^3 + 2^2 = (2^2 + 2^1 + 2^0) * 2^2 = 7 * 2^2 。由此我们可得出 7 <<2 = 7 * 2^2 = 28 。

我们通过计算几个简单的左移位运算,与标准答案进行比较,验证一下这个结论。

在控制台中以上几个算式的结果为

答案完全一致。说明我们的结论是正确的。当然这个结论 仅限于那些二进制移位不会左移移出的数字的简单运算 。当我们遇到一些简单的可以口算的左移位运算时就可以使用这个结论快速得到结果,如果对于 99999 <<66 这种较复杂的运算你也用这个结论计算,也没有人会介意。

下面我们看一下负数的左移位运算。以 -66 <<2 为例。

首先,我们先复习一下负数如何转换为二进制。

负数转换为二进制的步骤有三:

然后对其向左移两位.

得到值为 1111 1111 1111 1111 1111 1110 1111 1000 .然后我们将其转换成十进制。

转换为十进制为 -264.即 -66 <<2 = -264 。

刚刚我们计算 -66 的二进制得到的是 1111 1111 1111 1111 1111 1111 1011 1110 。我们在控制台验证一下我们得到的这个二进制。

我们比较一下下面几个算式。

是的没错,进行无符号左移位运算时,当两个数的绝对值相等时,其相同位数的移位的绝对值一定相等。

这里以 666 >>3 为例。

首先将666转换为二进制是 0000 0000 0000 0000 0000 0010 1001 1010 。

然后对其向右移三位。

得到值为 0000 0000 0000 0000 0000 0000 0101 0011 .

转换为十进制为 83.即 666 >>3 = 83 。

然后我们对以上的运算过程做一个处理,将这些二进制转换为我们熟悉的十进制。

这个规律好像不太好总结?

这里以 -666 >>3 为例。

因为是有符号的运算,所以这里不再适用上一小节说的js的特殊处理。先将-666转换为二进制。

即-666的二进制形式为 1111 1111 1111 1111 1111 1101 0110 0110 ,然后对其进行有符号右移位运算

移位后得到的值为 1111 1111 1111 1111 1111 1111 1010 1100 ,是一个负值,我们将其转成十进制。

我们对此结果进行验证。

可见,我们的运算是完全正确的。

这里我们以 666 >>>3 为例。

首先将666转换为二进制是 0000 0000 0000 0000 0000 0010 1001 1010 。

然后对其向右移三位。

得到值为 0000 0000 0000 0000 0000 0000 0101 0011 .

转换为十进制为 83.即 666 >>3 = 83 。

这里以 -666 >>3 为例。

因为是有符号的运算,所以这里不再适用上一小节说的js的特殊处理。先将-666转换为二进制。

即-666的二进制形式为 1111 1111 1111 1111 1111 1101 0110 0110 ,然后对其进行有符号右移位运算

移位后得到的值为 0001 1111 1111 1111 1111 1111 1010 1100 ,转成十进制为536870828。

是不是超级大。因为是无符号右移位运算,所以在左边空出部分不论正负都会填充0.

我们对此结果进行验证。

可见,我们的运算是完全正确的。

注意:因为对负数进行无符号右移位运算时,所得结果很大,所以在使用过程中需要格外注意。

疑问:左移位和右移位根本都是只对位置进行了移动,那么对于 x1 >>k = y1 和 y2 <<k = x2 中的 x1 等于 x2 , y1 等于 y2 吗?

不一定。因为我们不能确保移动过程中被丢弃的值均为0。但凡有一个1被丢弃,就不会相等。而如果被丢弃的都是0,那么 x1 === x2 y1 === y2 。如下图所示。

这里以 66 &33 为例。

首先将两个数转换为二进制是 0000 0000 0000 0000 0000 0000 0100 0010 和 0000 0000 0000 0000 0000 0000 0010 0001 。

然后对其进行与运算。

得出结果为 0.

负数的与运算与正数并无区别,不做讨论。

这里以 66 | 66 为例。

首先将两个数转换为二进制是 0000 0000 0000 0000 0000 0000 0100 0010 和 0000 0000 0000 0000 0000 0000 0100 0010 。

然后对其进行与运算。

得出结果为 66.

负数的与运算与正数并无区别,不做讨论。

这里以 66 ^ 66 为例。

首先将两个数转换为二进制是 0000 0000 0000 0000 0000 0000 0100 0010 和 0000 0000 0000 0000 0000 0000 0100 0010 。

然后对其进行与运算。

得出结果为 0.

负数的与运算与正数并无区别,不做讨论。

这里以 ~66 为例。

首先将其转换为二进制是 0000 0000 0000 0000 0000 0000 0100 0010 。

然后对其进行与运算。

将结果( 1111 1111 1111 1111 1111 1111 1011 1101 )转换为十进制

得出结果为 -67.

这里我们再我看几个例子。

从中我们可以看出, 位非操作就是对数字加一,然后取负 。我们可以写个简单的判断方法来验证。

位运算符运算结果非常有趣,在平时可以多加应用,但是一定要注意可能产生大数的预算,避免产生不必要的BUG。

这篇文章只是做了一个简单的介绍。后面有空了会做一下在实际开发中的应用,虽然我可能很久都遇不到。

JavaScript学习指南:JS入门教程

通常,我们不会去接触vue底层的东西,又或者我们突发奇想需要自己创造一套框架。可回头看看我们使用最多的,其实还是插件。

插件,你也可以理解为就是一套方法的集合,当我们需要调用它的时候,引入一下就行了。

举个例子,比如说,swiper和elementui。

一般来说,我们每个项目都会安装一大堆的插件。用于处理各种交互效果和逻辑,但是,网上能搜到了插件不一定能解决我们所有的问题。也就是说,我们剩下30%左右的逻辑部分是需要自己处理的,比如说,转化时间,处理字符串等等。

这些东西网上是没有现成插件的,需要我们自己来写。此时,如果你每一个组件里面都去定义方法就显得太low了。

我们需要自己写一个插件,事半功倍!

一般来说,我们自己的js通常会写成下面的两种形式:

第一种,声明多个方法。这个做法也叫函数声明,这样做的好处是,声明到全局,你只要引用了它,在页面任意地方都可以使用。但是同样的缺点也很明显,容易引起全局污染,浪费浏览器资源。而且当我方法多的时候,调用起来很不方便。

第二种,这是我们最长使用的声明方式,函数表达式。目的就是加载了这个js以后,当我需要使用的时候,直接调用str.xxx(),就可以返回我需要的内容了。并且,方法封装在变量内部,不会引起全局污染,也符合模块化的规则。

ok,ok。我们接下来,就要把我们自己的方法定义到vue上去使用。

我首先把js放到了项目文件夹中,然后在main.js中引入。

调用起来是完全没有问题的。

但是,又好像哪里不太对?是的,这样我们仅仅是引入了一个js,并没有把它形成一个js的插件。

我们来看看一个标准的js插件的调用形式:

为什么他这个可以直接从this上面调用???

个人理解他的方法应该是被定义到全局的vue对象上面了,这里的this应该指的就是vue本身!

如果你看过龙哥前面的教程,你应该知道,当我们引入的插件,是一个对象的时候,应该使用:

use方法,可以把一个符合vue标准的对象加载到vue本体上。

首先给我们的main.js下面增加一行。

然后打开我们自己的js文件,按照下面的方式书写:

最后在页面中调用的时候:

到此我们的插件已经跟vue融为一体!其实插件本身还支持更多参数和写法,请各位同学自行研究吧!