【JavaScript】变量及类型转换

变量

  1. 变量名必须以 英文字母_$ 开头
  2. 变量名可以包括英文字母_$数字
  3. 不可以用系统的关键字保留字作为变量名
  4. 区分大小写
  5. 类型不需要定义,由值决定类型

数据类型概要:

javascript是动态语言
解释一行,编译一行,所以变量由值确定类型
并且,解释性语言(弱数据语言)永远不可能输出地址

值类型有:原始值,引用值(他们的赋值有区别

原始值:

  • Number(=右边为数字,数字是浮点型)
  • String(=右边的内容用单引号或双引号包含起来)
  • Boolean(=右边的值有true或false)
  • undefined(=右边的值只有undefined,意为未定义)
  • null(=右边值为null,意为空,一般用作覆盖某些变量的值)

引用值:

  • function(函数)
  • array(数组)
  • object(对像)

原始值和引用值的区别:

例一:

var a = 10;
var b = a;
a = 20;

(a的值改为20,但b的值仍旧是10)

原始值存在stack()里面

栈的一个规则:先进后出
栈内存和栈内存之间的赋值是copy,互不影响

例二:

var arr = [1];
var arr1 = arr;
arr.push(2);

(arr和arr1都改为1,2)

引用值存在heap()里面

堆heap内存是引用值(值放入堆heap内存中,值对应的地址放进栈stack中)

例三:

var arr = [1,2];
var arr1 = arr;
arr = [1,3];

(arr的值改变,但是arr1的值不变,因为 arr = [1,3]; 是arr重新在堆heap里申请了新的空间,且值对应的存在栈stack里的地址得到改变,而arr1的堆heap的值和栈stack的地址都没变)

typeof

typeof()用来返回括号中的值的类型

六种数据类型:

  • number(infinity,NaN属于number类型)
  • string
  • boolean
  • undefined
  • object(注意:null,数组,对象的数据类型是object)
  • function

typeof调用方法:

  • typeof(变量)
  • typeof 变量

一般,如果访问没定义的变量,会报错
但有一极特殊的情况,
当且仅当:未定义的变量放入typeof()中不会报错
result: undefined(是字符串类型的)

类型转转

考虑原始值的类型转换即可,引用值的类型转换没意义

###显示类型转换
Number() :
例一:

var num = Number('123');
//等价于 var num = 123;

例二:
一般明显是非数的转换为Number,为NaN

var demo = undefined;
var num = Number(demo);
console.log(typeof(num) + ":" + num);

result: Number : NaN

例三:

var demo = "123abc";
var num = Number(demo);
console.log(typeof(num) + ":" + num);

result: Number : NaN

例四:

var demo = "-123";
var num = Number(demo);
console.log(typeof(num) + ":" + num);

result: Number : -123

例五:
Number(true)的结果是 1
Number(null)的结果是 0

parseInt() :
:括号内的数据类型转换为整型,将字符串数字转换为整型,而其余的为NaN
:parseInt(),括号内可以写两个参数,右边的是基底radix
:parseInt(),括号内的数据,从第一位数字看起,看到非数字位停止(若第一位不是数字,则返回NaN)

例一:

var demo = "123";
var num = parseInt(demo);
console.log(typeof(num) + ":" + num);

result: Number : 123

例二:

var demo = true;
var num = parseInt(demo);
console.log(typeof(num) + ":" + num);

result: Number : NaN

例三:

var demo = "123.9";
var num = parseInt(demo);
console.log(typeof(num) + ":" + num);

result: Number : 123

:parseInt(),括号内可以写两个参数,右边的是基底radix
例一:

var demo = "10";
var num = parseInt(demo,16);
console.log(typeof(num) + ":" + num);

result: Number : 16
基底是16,所以左边参数认为为16进制的,然后转换为十进制

例二:
注意:radix的范围一般2-36,代表的是进制,对应的不合理的数结果为NaN

var demo = "3";
var num = parseInt(demo,2);
console.log(typeof(num) + ":" + num);

result: Number : NaN(例二中radix为2,二进制数不存在3)

parseFloat() :
与parseInt()有许多相似之处
区别:parseFloat是转换为浮点型,而且只能有一个参数

String() :
无论是什么,都转换为字符串

toString() :

  • 写法有一些不同var demo = 123; var num = demo.toString();
  • 也可以转换为字符串(注意,undefined和null不能toString,不然会报错)
  • toString()括号中也可以有参数,toString(radix),不过这个radix是目标进制(和parseInt()中的第二个参数是基底不同),若radix为8,即将十进制的数转换为八进制的数

Boolean() :
转换为布尔值

只有六种值对应的boolean值是false;

  • undefined
  • null
  • NaN
  • “” (空字符串**"",和空格字符串" "**不一样)
  • false
  • 0

隐式类型转换

一元正负,加减乘除取余;大于小于等于…(有数字);
都先隐式的调用Number()

与或非,先隐式的调用Boolean()

isNaN() :
自己写一个isNaN()的功能:

function isNaN(num) {
	var ret = Number(num);
	ret += "";
	if (ret == "NaN") {
		return true;
	}
	else return false;
}

isNaN()会先隐式的调用Number(),再判断是不是NaN,是则为true,否则为false

几个特殊知识点(undefined,null,NaN):

  • undefined和null 与数字0比较的结果都是false(无论是大于小于,还是等于)
  • undefined == null;的结果是true
  • NaN == NaN; 的结果是false(NaN不等于任何数,包括它自己)

避免发生隐式类型转换 :
绝对等于 ===
绝对不等与 !==


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值