js 杂七杂八小知识(一)

2020/05/16更新 - 类型转化

-------------------------------------------------------------------------------------------------------------------------------------------------------

声明一个变量的语法:var 或者 let 关键字之后 加上 这个变量的名字,可以理解声明一个变量相当于 一个装东西的容器。

1、一个变量存在但是未赋值和一个变量并不存在,他们完全是两回事儿;

变量未赋值:已经声明变量了(变量已经存在,也就是说容器已经存在了,但是里边没东西),还没有赋值,输出的是 undefined

变量不存在:容器还不存在,打印报错!

 

undefined 与 null

undefined:声明了变量,但是没赋值;而null是声明了变量,且给变了赋值了,但是值为空!!!

undefined和null的比较: 

js权威指南:undefined是表示系统级的,出乎意料的或者类似错误的值的空值;而null表示程序级的、正常的或在意料之中的的值的空缺。如果将他们赋值给变量或者属性或者作为参数传给函数,建议使用null。

 

NaN

NaN 与任何值都不相等,包括自身。

isNaN()判断参数是否是NaN。

字符串不是不变的,所以使用字符串的方法不可能改变自身。

字符串拼接:

加号 用于字符串表示字符串的连接,一个数想转化为字符串只需 :

 

布尔值:

转化为false的值:

"" 、 null 、  undefined  0-0NaN 、判断语句,其他都为true。。。

 

引用类型值

引用值的比较(对象、数组、函数)是比较的内存地址。当且仅当引用同一个地址时,才相等。。。

 

类型转换

补充:

1、转数字类型的方法:

// parseInt 、parseFloat 、Number 、isNaN  、加减乘除
Number(NaN) -> NaN
Number(null) -> 0
Number(undefined) -> NaN

2、引用类型转数字的方法 :

系统默认的规则:

先使用toString()转化为字符串 ,然后 在使用Number()方法 转为数字 ( 这是系统默认的转化方法 )

//  数组
[1].toString() -> Number('1') -> 1
[2,3].toString() -> Number('2,3') -> NaN
// 对象
{name: 'lxc'}.toString() -> Number([object, Object]) -> NaN

3、数学运算:

非加法运算规则:

(1) 除了加法有特殊性,其他的都是数学运算,  如果遇到非数字类型, * 需要使用Number()转化为数字类型,然后在进行运算

1- '1' -> 1-Number('1') -> 1-1 -> 0
1- NaN -> NaN
10*[10] -> 10*Number([10]) -> 10*10 -> 100
10/undefined -> 10/Number(undefined) -> 10/NaN -> NaN

(2) 加法运算规则: 

遇到字符串的时候 , + 不是数学运算,而是字符串拼接;

字符串拼接:把其他值使用toString() 转化为字符串,然后在进行拼接。。。只要不遇到字符串,就是数学运算。。。

1+{name: 'lxc'} -> 1+({name: 'lxc'}.toString()) ->  1[object Object]
null + '1' -> null.toString()+1 -> null1
null + 1 -> Number(null)+1  -> 1 // 加法运算,所以null先转化为数字类型,然后在 相加

4、toString()方法

规则: 其他类型调用toString() 方法,是直接把值用单(双)引号包起来,只有对象的toString() 得到的值是 "[object Object]"

 

5、toFixed()

根据参数获取小数点后指定位数,并会将数字转化为字符串,而且会进行四舍五入或者 填充0.。。

6、paresInt、parseFloat

parseInt:只能解析整数

parseFloat:可以解析整数和浮点数

以上两个方法的第一个参数如果是非法的非数字类型,会得到NaN的结果

 

instanceof

权威指南:instanceof运算符的左操作数是一个对象,右操作数是对象的类。所有对象都是Object对象的实例。

判断左侧对象是否是右侧类的实例:

 

delete

一元操作符,用于删除对象属性 或者 数组的元素,通过delete删除数组中的元素,会在删除之后留下一个‘洞’,也就是说它不会改变数组的长度,下边尝试读取一个不存在的元素,返回的是undefined。

注意:一些内置核心和客户端的属性是不能删除的,用var声明的变量也是无法删除的。

 未声明,可删除

 

switch语句

参数n是否与下边case 之后的值相等(这里的相等是 === 绝对等于)。

switch(n){
    case 1:
   //执行代码块
    break; //break的作用是:终止switch语句
    case 2:
   //执行代码块
    break;
   // ··· ···
}

 一个更接近实战的例子:

function test(x){
    switch(typeof(x)){
        case 'number':
        return x + ' is a number'
        case 'object':
        return x + ' is a object'
    }
}
test(1)

 

throw

使用throw语句会显示的抛出异常。使用try catch 会捕获异常,通常throw 会与Error类结合使用,主动抛出一个自定义的异常。

throw new Error('this is not a object')

使用try catch来捕获自定义异常

try {
    throw new Error('this is not a object')
} catch (error) {
    console.log(error) //当且仅当try语句块抛出了异常,才会执行这里的代码
}
finally{
    //不管try抛没抛出异常,总会执行这里边的代码块!
}

 

权威指南:当抛出异常时,javaScript解释器会立刻停止当前正在执行的逻辑,并跳转至就近的异常处理程序。异常处理程序会被catch捕获,如果抛出异常的代码块没有一条相关联的catch从句,解释器会检查更高层的闭合代码块,看它是否有相关联的处理程序。以此类推,直到找到异常处理程序为止,没有找到异常处理程序,javaScript会把异常当做程序错误来处理,并报告给用户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值