JavaScript变量 、 数据类型 、 数据类型转换 、 运

一.不可改变的原始值(栈数据)(五个)

1、声明变量
作用:到内存中申请一段空间,并且指定一个别名。
var 变量名;

数字(number),字符串(string),布尔值(boolean),undefined,null

使用 "=" 为变量赋值
变量名=值;

其中;undefined是未定义的意思,而null是空的意思,他们俩的区别在于,null有值,不过这个值是空值,而undefined是未定义,完全没有值的意思。null一般用作占位。

简写:
var 变量名=值;
注意:
1、声明变量的时候,尽量不要省略 var 关键字
如果 省略了 var ,有可能会造成"全局污染"的结果
2、声明变量如果未赋值,则有一个默认值,为 undefined

var a = 4;
var b = a;
a = 10;
console.log(b);//4
//原始值是把一个值a放到另一个值b里面,改了第一个值a,第二个之值b不变

问题:声明一些变量,分别保存一个人的 姓名(stuName),性别(stuGender),年龄(stuAge),HTML考试成绩(htmlScore)

二.引用值(堆数据)

一次性声明多个变量:
var 变量名1,变量名2,....,变量名n;
var 变量名1=值,变量名2,....,变量名n;
2、变量名命名规范
1、不允许使用JS的关键字和保留关键字
关键字:var,if,else,while,for...
保留关键字:class,int,float...
2、规范
1、可以包含字母、数字、下划线以及$
2、不能以数字开头
var name1; 可以
var 1name; 错
3、尽量见名知意
var stuName;
var userName;

数组(array),对象(object),函数(function)

var yonghuxingming;
4、可以采用"匈牙利命名法","驼峰命名法","下划线命名法"
匈牙利命名法:涉及获取页面表单控件时使用 txt...
驼峰命名:
单一单词 采用全小写
var age;
合成词:第一个单词全小写,其余每个单词首字符 大写
var userAge;
下划线命名法:
var _salary;
3、变量的使用
1、只声明,未赋值
值为 undefined
2、变量如果未经声明直接使用
console.log(test);
语法错误!!!
3、对变量进行存/取操作
存:赋值操作
取:取值操作
1、存 - SET操作
变量 出现在 赋值符号(=)的左边
var userAge;
userAge=18;
2、取 - GET操作
只要 不出现在 赋值符号(=)的左边,都是取值;
var userAge = 18; //声明并赋值
console.log(userAge);
var newAge = userAge;
//userAge 是取值
//newAge 是 存值操作

**注意:只要对变量进行赋值就会进行内存的重新申请**

注意:赋值符号的左边,只能是变量
var userAge = 18;

1.

18=18; //不成立
18=25; //不成立
4、练习
1、创建3.html,在<script>元素中声明三个变量,用来保存快餐店推出的一款套餐内容
1.1 用一个变量保存一种汉堡的名称
1.2 用一个变量保存配餐的名称
1.3 用一个变量保存饮料的名称
2、追加程序,输出套餐名称及其内容

var arr = [1, 2];
var arr1=arr;
arr.push(3);
console.log(arr1); //[1, 2, 3]
//引用值时把第一个值放到第二个值里面,改变第一个值,第二个值也改变
//引用值是在栈内存里面存放堆的地址,拷贝的是地址,所以改变了arr,实际上是改变了arr指向的地址内存放的内容,而arr和arr1指向同一个地址,故arr1也跟着变

3、尝试为一个未声明过的变量赋值,再输出
4、输出一个未声明过的变量,观察结果
4、运算符

地址

变量

存储值

0x0001

arr

[1,2]    [1,2,3]  <--arr.push(3)

0x0002

arr1

0x0001

1、赋值运算符

var userName="张三";
2、算术运算符
+,-,*,/,%
% : 取余,俗称 模
5%2 ... 1
2%5 ... 2
使用场合:
1、判断奇偶性
52 % 2 ... 0
2、判断某数字是否为 几 的倍数
3、获取某数字得的最后几位
var num = 1234;
var last1=num % 10;
var last2=num % 100;

  • : 作用
    1、数字的 加法 运算
    2、字符串的连接作用
    如果 + 两边的操作数有一个是 字符串(""),那么操作结果就死 连接 而不是加法操作

套餐名称:香辣鸡腿煲套餐
汉堡:香辣鸡腿堡
配餐:炸薯条
饮料:可乐
优先级 :先 */% 再 加减
var result = 25+18*2+6/3+5%2;
可以通过 () 提升优先级
算术表达式:由算术运算符,连同操作数所组成的表达式。
5、常量
console.log("Hello World");
1、什么是常量
一旦声明好,就不允许在程序运行过程中修改的数据,就是常量
2、声明常量
const 常量名=值;
注意:
声明时,必须赋初始值
常量名称,采用全大写形式
3、练习
创建4.html,声明一个变量(r),保存一个圆的半径,计算该圆的周长(l),以及该圆的面积(s)
l = 2*PI*r;
s = PI*r*r;
6、数据类型
1、什么是数据类型
保存的数据的类型

作用:不同类型的数据所开辟的空间大小不一样。
2、数据类型分类
1、原始类型 (基本类型)
1、number 类型
数字类型

可以表示32位的整数,也可以表示64位的浮点数
8位=1字节(byte)

整数:占4个字节
小数:占8个字节

十进制:123456
八进制:010
十六进制:0x10
2、string 类型
字符串 类型

使用:需要用 ""或'' 将值括起来

He"ll"o
W'or'ld

特殊字符需要进行转义,
转义字符:
n:换行
t:一个制表符
r:回车
":"
':'
\:

//单行注释
/*多行注释*/
3、boolean 类型
布尔类型
只记录 "真" 或 "假"
值:
true :表示真
false:表示假
在+-*/%运算中
true :当1做运算
false:当0做运算
4、undefined
语义:不存在该数据
产生原因:
1、声明了变量未赋值
2、访问的对象的属性不存在
2、引用类型

  1. 数据类型转换:
    隐式转换: 程序根据自己的需要,自动转化数据的类型
    强制转换: 由程序员主动调用函数执行的转换
    何时:当隐式转换的结果,不是想要的
    如何:
  2. x to string:2种:
  3. x.toString(): 不能转null和undefined
    原因: null和undefined表示什么都没有,无法加.调用函数。
  4. String(x): 万能!——首选
    模拟实现String(x)
    function String(x){
    if(x===undefined){
    return "undefined";
    }else if(x==null){
    return "null";
    }else{
    return x.toString();
    }
    }

2.x to number:

  1. 非字符串内容转number:
    var num=Number(x)
    其实: Number也可转纯数字组成的字符串。
    bool-> true-1 false-0
    如果转不了,返回NaN:
    NaN: not a number
    NaN是number类型
    NaN代表所有无效数字的值
  2. 字符串转number:
    parseInt(str)——取整,去小数
    原理:从str开头开始读取每个字符
    跳过开头的空字符
    金沙官网线上,碰到第一个非数字字符结束
    如果传入的参数不是字符串,则首先转为字符串,再读取内容。
    Number(true) vs parseInt(true)
    1 parseInt("true")
    NaN
    问题:不认识小数点——去掉小数部分
    何时使用: 只有在非常确定的要去掉小数部分时。
    parseFloat(str) —— 首选
    原理: 同parseInt
    认识第一个小数点
    自动判断转换后的类型,优先存为整数

如果无法转为数字,返回NaN

  1. x to bool: Boolean(x)
    转换规则: 只有五个值会转为false:
    "" 0 NaN null undefined
    除此之外,都转为true

  2. ***运算符和表达式:
    ***程序:人的想法在计算机中的执行
    运算符:程序中,模拟人的想法的符号
    表达式:数据,变量,运算符组成的公式

算术运算: + - * / %
何时使用%: 1. 判断能否整除

  1. 限制计算的结果不能超过最大值
    隐式转换:
    默认: 一切转为数字,再算术计算
    如果无法转为数字,则转为NaN:
    NaN参与任何算数计算,结果还是NaN
    特殊: +运算中,碰到字符串,一切都转为字符串,+法计算变为字符串拼接

关系运算: 做比较,做判断
> < >= <= == !=
返回值: true/false
隐式转换:
默认: 一切都转为数字,再比较
特殊:
1.如果转不了,会转为NaN比较:
NaN不大于,不小于,不等于任何值
无法用普通的==判断是否是NaN
解决: isNaN(num)
判断num是不是NaN,结果true/false
如果true,num是NaN
false,num不是NaN,是数字
反正用: !isNaN(num)
判断num是不是数字
true->是数字
fales->不是数字
2.undefined vs null
问题: undefined==null -> true
==中undefined隐式转为null
解决: 全等===
不带隐式转换的==
要求: 数据类型必须相同,其次再值相等。
何时使用: 不希望比较时,自动隐士转换时——要求类型也必须相同时
尤其: 在和undefined,null比较时
3.如果参与比较的都是字符串:
按位PK每个字符的unicode号
如果前一位相同,就比下一位
如果前几位都相同,比长度
4.如果两个引用类型的对象做==比较
比较的是对象的地址
比如: []==[] -> false
[]表示创建一个新数组的意思
有两个[],就创建了两个新数组
两个新数组的地址不可能一样

逻辑运算:
将多个关系运算,综合得出最终结论
&&(而且) ||(或) !()
如何使用:
条件1&&条件2...:只有两个条件同时为true
结论才为true
只要一个条件为false
结论为false
条件1||条件2...:只要一个条件为true
结论就为true
除非所有条件都为false
结论才是false
!条件: 颠倒条件的判断结果

隐式转换: 将每个条件临时转为boolean

***短路逻辑: 如果前一个条件已经可以得出最终的结论,则后续条件不再执行(即使写错)
***利用短路逻辑:

  1. 利用&&短路逻辑: 实现简单分支:
    一个条件,一件事,满足就做,不满足就不做。——只能简化if结构
    条件&&(操作)
    如果条件是true,才执行操作
    如果条件是false,不执行任何操作
  2. 利用||短路逻辑: 实现两个值自动选择有效的值使用。
    值1||值2:
    如果值1有效(只要不是5个值之一)
    就返回值1
    如果值1无效(值1是5个值之一)
    就返回值2

课堂练习: 运算符优先级:

位运算:

  1. 左移和右移:
    m<<n 等于 m* 2的n次方
    m*Math.pow(2,n)
    m>>n 等于 m/ 2的n次方
  2. 取整:
    parseInt(m)
    m^0
    m|0
    m>>>0

扩展赋值运算: 对赋值运算的简写:
m+=n => m=m+n 累加
m-=n => m=m-n
m*=n => m=m*n
m/=n => m=m/n
m%=n => m=m%n

如果n是1: 递增1 递减1
m+=1 => m++
m-=1 => m--
递增/递减单独使用,前++和后++完全等效
如果递增/递减运算参与到其他表达式中:
前++和后++的结果不同,会影响表达式:
***相同: 变量中的值一定都+1
***不同: 后++,返回旧值
前++,返回新值

2.

var arr = [1,2];
var arr1 = arr;
arr = [1,3];
console.log(arr1);//[1,2];    
//arr = [1,3]实际上是在堆内另建了一个地址,arr指向了新的地址,而arr1还是指向原来的地址,故arr1值不变

地址

变量

存储值

0x0001

arr 

[1,2]   

0x0002

arr1

0x0001

0x0003

arr

[1,3]

本文由金沙官网线上发布于Web前端,转载请注明出处:JavaScript变量 、 数据类型 、 数据类型转换 、 运

您可能还会对下面的文章感兴趣: