// js 会把var声明的变量提升到js文件的最顶部
// 控制台打印语句
// console.log('你好!');
// 警告框! 通知用户出错了
// alert(' haha')
// 输入框-输入内容 prompt得到的输入内容永远都是字符串
// var n1 = prompt("第一个数")
// var n2 = prompt("第二个数")
// 使用弹出框来显示计算结果
// alert(n1 - n2);
// 数据类型-数据类型判断
// 表示空值的null,内存不再被占用
var number1 = 1000000;
console.log(number1)
number1 = null;
console.log(number1)
// 变量定义了,但没有赋值,所以js给了一个默认值undefined
var n2;
console.log(n2);
// null 和undefined的区别:null表示值是空的, undefined变量被定义但没有赋值
// 使用var和不使用var声明的变量的区别是什么? var声明的变量只在当前作用域 生效, 不使用var的全局生效
// js 特性之一:变量提升:目的是为了减少非标准试用下的报错
// 第二点 是js的执行特性 单线程 遇到报错停止解读
// 变量提升只是指变量的声明提升 但是赋值没有提升 赋值留在原地
// 类别: 基本/基础/原始/简单/数据类型
// null 空值
// undefined 为赋值
// 数字
var number = 100000000000000000000000;
// 字符串
var str = "你好世界";
// 希尔值 只有两个值 是和否
var t = true; //真是
var f = false;//假否
// 检测数据类型
console.log(typeof number);
console.log(typeof str);
console.log(typeof t);
console.log(typeof f);
// 字符串
/*
1.字符串必须使用''或""
2.字符串可以是空的
3. 字符串单引号可以嵌套双引号,双引号嵌套单引号
4.空格也占位置
*/
var str = '"123"';
console.log(str);
// var变量可以重复声明
var str = "123456"
// 获取字符串的长度=length
console.log(str.length);
// 字符串里空格也是占位置的
var str2 = "天气 热了";
console.log(str2, str2.length);
// \n特殊字符表示换行
var str3 = "你好\n啊\r";
console.log(str3);
// 如果就是需要使用相同的的引号嵌套,需要使用转义符
var str4 = "开'始'了";
console.log(str4);
/*
=赋值
相等 == 判断值是否相等
全等 === 先判断值是否相等,在判断类型是否相等
相等和全等的区别
*/
console.log(null == undefined)
console.log(null === undefined)
// 人员信息收录
/* var username = prompt("姓名");
var age = prompt("年龄");
var gender = prompt("性别");
confirm(
"欢迎" + username + "来到社区,您的年龄是:" + age + "性别为" + gender
); */
// 网吧信息收录
/*
1.年龄 ,姓名,手机号,身份证,余额,密码
2.计算+-*/
/
/ var user = prompt("第1个数")
var age = prompt("第2个数")
var phone = prompt("第3个数")
var id = prompt("第4个数")
var balance = prompt("第5个数")
var password = prompt("第6个数")
confirm(
"年龄" + age + "姓名" + user + "手机号" + phone + "身份证" + id + "余额" + "密码" + password
) */
// var n1 = prompt()
// var n2 = prompt()
// alert(n1 - 0 + (n2 - 0))
// alert(n1 - n2)
// alert(n1 * n2)
// alert(n1 / n2)
// 数据转换
/*
1.字符串转换-只要是被引号引起来就是字符串
隐式转换;js自己做的类型转换 1 + '1' == '1' + '1' 拼接 = '11'
隐式转换:'2' - '1' == 2 - 1 = 1
2.转数字的规则
如果一个值可以为真,则可以转成数字1,true转成1,false转成0,""转成0,非空的字符串如果内容是数字可以转数字,否则就是NaN,如果一个值不能转成数字会被转成NaN非数字型
3.布尔值的规则
0,'',null,undefined,NaN会被转成假值false,其他的数据可以转truede,
*/
console.log(typeof typeof("5" - "1"));
// % 取余数 模
console.log(4 % 2);
// 显式类型转换
var s = "555"
// 内置的类Number String
console.log(typeof Number(s));
var n = 9999;
console.log(typeof String(n));
// 把一个小数-不管是整数还是浮点数变成小数的字符串 toFixed 会四舍五入 固定小数位的
var price = 100;
var price2 = 46.66;
console.log(price.toFixed(3));
console.log(price2.toFixed(1) - 0);
// 构造函数 constructor 使用点语法 返回的是数据类型的内置对象
console.log(n.constructor == Number)
// 检测一切数据类型 toString 原型
console.log(Object.prototype.toString.apply(price ))
// 检测数据类型 typeof
console.log(1 - 0 );
console.log("" -'');
console.log(true - 0);
console.log(true - 0 + null * false - "" )
console.log(typeof true, typeof "");
console.log("1" === '2');
console.log(isNaN('aspeghdv')); //不是数字为true,是数字为false
// 转成整数 直接把小数位的部分去掉
console.log(parseInt("100.923"));
console.log(parseInt("abc"));//非数字的内容不可以被转成整数,则结果是nan非数字
console.log(parseInt(9527.6666)); // 对于浮点数也是直接去掉小数位
console.log(parseInt(222));
console.log(parseInt("100元")); //从头开始转换,如果可以转成数字的部分就转数字了,不能转的就停止了
console.log(parseInt("$199"));//第一个不能被转数字,就立即停止了,结果是nan
// 转成浮点数---小数,把目标中的第一个点后面的数字转成小数,多余的点则为非法的就被忽略了。
console.log(parseFloat("1.2.3"));
// 预解析 执行从里向外,从右向左
// alert(alert(alert("1")));
// var a = 1 + 2 + 3 + 4 ;// 表达式,由这个表达式求出一个值,再把这个值赋值给左边的变量
// 强制转换布尔值Boolean
console.log(Boolean("."));
// 比较运算符 == === != !== 和逻辑运算符 !取反或(或者) && (与)
console.log("" == true); //隐式转换
console.log("1" =true);//隐式转换
console.log("1" ! "1");
// 清除所有的打印信息
console.clear()
// js中把数据分成简单类型值和引用类型值
// 简单类型值:存储在栈内存中,按值访问,可直接访问,访问速度块,占据内存空间小
// 引用数据类型:存储在堆内存中,由多个值组成的数据我们称为引用数据类型 (object,array),占据内存空间大,按共享访问