JavaScript入门

JavaScript笔记1-基础与数据类型

最近在实习,发现之前学的东西因为太久没用好些都忘了,于是决定花点时间再串一串,想把之前没掌握的东西再拿起来。如果有什么不对的地方,还请大家看到了及时指出呀!
用的教程是网道的JavaScript教程,这个教程有一点不好的是里面经常有知识点在不同章节之间跳转,可能对新手不是太友好,但是对有一定基础的人来说应该还是足够了。
链接:https://wangdoc.com/javascript/index.html

变量

  1. JavaScript是一种动态类型语言,一个变量可以随时更改自己所属的类型
  2. 同一个变量只有第一次声明是有效的,之后再对其声明不会起作用。但赋值操作可以多次进行,后面的值覆盖前面的值
  3. 变量提升:JavaScript脚本在执行过程中会先提取出被声明的所有变量,再一行一行地执行代码。这个过程使所有变量声明都被提升到了头部。如果在变量被赋值之前就操作了这个变量,就不会得到预期的结果。
<script>
      var a;
      //没有赋值就进行操作
     a=a+1;
     console.log(a);//控制台输出的会是NaN,如果没有a=a+1;语句,则输出undefined
     a=999;
</script>

赋值:‘=’,相等:‘==’,严格相等:‘===’

if-else

if-else本不用多说,但是有的特殊情况自己总是搞不清,之前看到有的面试题又会考,因此在这里多做一下记录。else总是和距离最近的、且if-else结构不完善的if语句配对。此外,用if-else时还是应该打好{},否则很容易分不清判断条件的嵌套关系。
我觉得除了面试题会考之外,没有什么开发环境会傻到不自动缩进了…
大家应该也不会没事不好好打{}的…

var m = 1;
var n = 2;
if (m !== 1)
else console.log('hello');//这么写此处会报错!
if (n === 2) console.log('hello');
else console.log('world');//该else搭配n的判断

这么写第四行的if (m !== 1)没有单行的操作也没有{},它就套着之后的所有语句,因此if (m !== 1)本身并没有else,它之后的else找不到可以匹配的if块,就报错了。
如果这么写:

<script>
           var m = 1;
           var n = 2;
           if (m !== 1){}
           else console.log('hello');
           if (n === 2) console.log('hello');
           else console.log('world');
        </script>

这样就不会报错了,因为此时第一个if可以和第一个else配对了。

label 标签

JavaScript中通过label标签来做定位符,常常与break和continue一起用,跳出label块,再继续执行语句。

top:
  for (var i = 0; i < 3; i++){
    for (var j = 0; j < 3; j++){
      if (i === 1 && j === 1) break top;
      console.log('i=' + i + ', j=' + j);
    }
  }
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0

如果换成continue的话就会把i=2的情况都输出。

数据类型

常见的数据类型是数值类型(如999,233),字符串类型(如’aaa’,‘look’),布尔值类型(true/fase),null类型,undefined类型和对象类型。前三种类型因为其不可再分而被称为原始类型的值,对象类型则被称为合成类型的值。

数值类型

JavaScript不分整数和浮点数,所以1和1.0在JavaScript中是一样的,都是1.0。
取值范围上,JavaScript可以精确表示-253到253之间的数,即15位的十进制数字,超过就会有偏差了。正数如果到达/超过21024就会发生正向溢出,此时显示的是infinity,负数如果≤2-1075则会直接取0。
以下两种情况,JavaScript 会自动将数值转为科学计数法表示,其他情况都采用字面形式直接表示:
(1)小数点前的数字多于21位。
(2)小数点后的零多于5个。

NaN

这里就直接引用教程里的内容了。

(1)含义
NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合,也出现在函数计算出错的时候。
5 - ‘x’ // NaN
上面代码运行时,会自动将字符串x转为数值,但是由于x不是数值,所以最后得到结果为NaN,表示它是“非数字”(NaN)。
另外,一些数学函数的运算结果会出现NaN。
0除以0也会得到NaN。
0 / 0 // NaN
需要注意的是,NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,使用typeof运算符可以看得很清楚。
typeof NaN // ‘number’
(2)运算规则
NaN不等于任何值,包括它本身
NaN === NaN // false
数组的indexOf方法内部使用的是严格相等运算符,所以该方法对NaN不成立。
[NaN].indexOf(NaN) // -1
NaN在布尔运算时被当作false。
Boolean(NaN) // false
NaN与任何数(包括它自己)的运算,得到的都是NaN。

isNaN(var a)方法:判断一个数是否为数值,返回true/false
函数执行过程中,会将参数a先转换成数字,再执行方法本身。因此结果为true的参数可能本身并不是数值,在调用该方法时应该先做数据类型判断(typeof/instanceof/Object.prototype.toString())。

isNaN({}) // true
// 等同于
isNaN(Number({})) // true

isNaN(['xzy']) // true
// 等同于
isNaN(Number(['xzy'])) // true

但是,对于空数组和只有一个数值成员的数组,isNaN返回false。

isNaN([]) // false
isNaN([223]) // false
isNaN(['123']) // false
infinity

(1)含义
Infinity表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0得到Infinity
// 场景一
Math.pow(2, 1024)
// Infinity
// 场景二
0 / 0 // NaN
1 / 0 // Infinity
上面代码中,第一个场景是一个表达式的计算结果太大,超出了能够表示的范围,因此返回Infinity。第二个场景是0除以0会得到NaN,而非0数值除以0,会返回Infinity。
Infinity有正负之分,Infinity表示正的无穷,-Infinity表示负的无穷。
Infinity === -Infinity // false
1 / -0 // -Infinity
-1 / -0 // Infinity
上面代码中,非零正数除以-0,会得到-Infinity,负数除以-0,会得到Infinity。
由于数值正向溢出(overflow)、负向溢出(underflow)和被0除,JavaScript 都不报错,所以单纯的数学运算几乎没有可能抛出错误。
Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)
Infinity > 1000 // true
-Infinity < -1000 // true
Infinity与NaN比较,总是返回false。
Infinity > NaN // false
-Infinity > NaN // false
Infinity < NaN // false
-Infinity < NaN // false
(2)运算规则
Infinity的四则运算,符合无穷的数学计算规则。
5 * Infinity // Infinity
5 - Infinity // -Infinity
Infinity / 5 // Infinity
5 / Infinity // 0
0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity。
0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity
Infinity加上或乘以Infinity,返回的还是Infinity。
Infinity + Infinity // Infinity
Infinity * Infinity // Infinity
Infinity减去或除以Infinity,得到NaN。
Infinity - Infinity // NaN
Infinity / Infinity // NaN
Infinity与null计算时,null会转成0,等同于与0的计算。
null * Infinity // NaN
null / Infinity // 0
Infinity / null // Infinity
Infinity与undefined计算,返回的都是NaN
undefined + Infinity // NaN
undefined - Infinity // NaN
undefined * Infinity // NaN
undefined / Infinity // NaN
Infinity / undefined // NaN

null与undefined

null和undefined非常类似,甚至在做if判断时他们都会被转换成false。只不过null在被转换成数字时会被转换成0,而undefined在被转换的时候会转换成NaN。

对象类型

其中对象类型包括object{}、array[]、function三个成员。

数据类型判断

JavaScript中类型判断主要有三种形式:instanceof、typeof、Object.prototype.toString()。其中前两种是运算符。主要做判断条件时使用。
例如:
typeof ‘123’//string
typeof 123//number

var num=[1,2,3];
console.log(typeof num);
var a;
console.log(typeof a);
//输出为object和undefined
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值