JavaScript的数据类型的隐式转换(浅谈向)

前言

学过JS刚开始应该都了解过,JavaScript 是一个基于对象 动态 弱类型 解释性的语言.
为什么说JS是弱类型的语言呢.
简单举个显眼的例子:
JS的基本数据类型不像java一样 光是数字
就分为 int double long …一堆关键字.
JS直接使用一个var所替代.
并且JS拥有隐式数据类型转换 在遇到比较,逻辑,算数 ,运算符的时候 或多或少都会发生数据类型的转换.

强类型语言和弱类型原因其判断的根本是是否会隐形进行语言类型转变。
强类型语言在速度上可能略逊于弱类型语言,但是强类型定义语带来的严谨性又避
免了不必要的错误。

浅谈隐式数据类型转换

在JavaScript中分为基本数据类型和引用数据类型.
基本数据类型:Number(数字) String(字符串) Boolean(布尔) NaN(Not-A-Number 不是一个数字)
Undefined (未定义)Null(空值)
引用数据类型:Array(数组) Object(对象) function(函数)

JS中 在使用一些运算符的时候会发生隐式类型转例如:

console.log('123' + 1); //1231
//任何类型的数据和字符串所相加 中间的 + 的意思都是拼接字符串
//所以这里所输出的是1231(当然这种情况仅限于基本数据类型 引用数据类型会有其他的情况,但是大体相同);
console.log('123' + ['1',12]); //1231,12
//比如和数组相加 首先数组会去掉 外面的[] 然后将里面的元素全部
//转换成字符串拼接起来(包括" , ") 所以输出结果为1231,12
console.log('123' + {
     name:'wang'}); //123[Object Object]
//遇到对象首先浏览器是无法解析对象的(不代表没办法解析,这里指浏览器本体自动
//解析)
//所以转换成字符串就会变成[Object Object]然后拼接起来
console.log('123' + function(){
     }); //123function(){}
//函数对于浏览器来说转换成字符串直接将原本内容全部硬核转换所以输出123function(){}

而基本数据类型转换和运算符和左值和右值的类型有较大关系
在逻辑运算符中 (&& || )只要有一项为false
那么整个表达式的最终返回值就为false
比如:

//在js中true 和false转换成number类型 分别代表的是O和1

console.log( 1 + true);
//输出2
console.log( 1 - true);
输出 0
console.log( 1 > 2 && true - NaN);
输出false
var res = []>{
     };  //对象和数组的对比
        //[]---> ''    {} --->' [object,object]'
        //  ''     'object,object'
        //  0     NaN
        //false
 //一般业务中也很少拿undefined null NaN这些数据类型来进行运算或者比较
 //这里不做过多说明

计算隐式数据类型转换还要考虑运算符的各种等级
顺口溜:仅供参考–>

  1:从左往右计算 () 里面最优先
    2:全体单目排第二 ++ -- ! 【单目 只有一个操作数和操作符就可以运算的】
    3:乘法除法取余排第三;加减排第四
    4:移位(<< >>)排第五,关系(< > <= >=)排第六
    5:等于不等于排第七
    6:逻辑运算符排第八,&& 优先 || 
    9:赋值排第九
    10 逗号成员最低
    括号成员最高级,全体单目排第二;乘除余三,加减四,
    移位五,关系六,等于不等于排老七,逻辑八,赋值九,逗号成员排最低


   true false 分别代表 0 和 1 
   谁和字符串相加都是拼接

这里要注意的是两个字符串比较之间会发生的隐式转换
首先字符串会转化成编码字符
分为两种编码格式 AscII码和Unicode两种编码格式
优先使用的是AscII编码格式,

console.log('a' > 'A'); //true
这里a 的ascii码值为97 
A的ascii码值为65
所以a比A大返回true.
这里是要注意的 长字符串会先比较字符串的第一位
然后逐步比较第二位 第三位 直到比较出结果
如果是ascii内没有的字符
比如中文字符 会采用unicode编码进行比对.

你可能感兴趣的:(小知识,ascii码表,javascript,js)