常用方法
向body中输出内容
document.write("大河之剑天上来!");
弹出一个提示框,框中带有文本输入框
var input = prompt("请输入内容:");
console.log(typeof input); //string
console.log(input); //输入内容
计时器
// 开启一个计时器,传入的参数作为计时器的名字
console.time("timer1");
// 停止计时器
console.timeEnd("timer1");
confirm弹出框
// 参数为提示语句,点击确定返回true,点击取消返回false
var result = confirm("确认删除吗?");
console.log(result);
JS代码编写的位置
写在标签的属性中
- 这种方式结构与行为耦合,不方便维护,不推荐使用
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JS代码编写的位置</title>
</head>
<body>
<!-- 可以将代码编写到标签的onclick属性中,点击后代码执行 -->
<button onclick="alert('大河之剑天上来!');">戳我!</button>
<!-- 也可以将代码编写到超链接的href属性中,点击后代码执行 -->
<a href="javascript:alert('长枪一动白龙吟!');">点我!</a>
<!-- 可以采取这种方式阻止超链接的自动跳转行为 -->
<a href="javascript:;">再点我!</a>
</body>
</html>
写在script标签中
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JS代码编写的位置</title>
<script type="text/javascript">
alert("这是script标签中的代码!");
</script>
</head>
<body></body>
</html>
写在外部的js文件中
- 通过script标签引入
- 引入外部文件的script标签内部的代码不会执行,如果想要在内部编写代码,需要再加一个script标签,执行顺序就是代码的编写顺序
- 外部文件可以在不同的页面中同时引用,也可以利用到浏览器的缓存机制,推荐使用
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JS代码编写的位置</title>
<script type="text/javascript" src="dudu.js"></script>
<script type="text/javascript">
alert("这是script标签中的代码!");
</script>
</head>
<body></body>
</html>
数据类型
数据类型指的就是字面量的类型,在JS中一共有六种数据类型:
- String 字符串
- Number 数值
- Boolean 布尔值
- Null 空值
- Undefined 未定义
- Object 对象
使用 typeof 来检查一个变量的类型
var a = 123;
var b = "hello";
// 返回值是一个字符串
console.log(typeof a);// number
console.log(typeof b);// string
JS可以表示的数值范围
// 最大值
console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
// 0以上的最小值
console.log(Number.MIN_VALUE);// 5e-324
InInfinity
// Infinity表示 超过最大数值的数字 即正无穷
console.log(Number.MAX_VALUE * 6);
// Infinity 的类型
console.log(typeof Infinity);//number
//可以当做字面量使用
var a = Infinity;
console.log(a);
NaN
// 表示 Not A Number
var a = "abc" * "bcd";
console.log(a);// NaN
// 可以当做字面量来使用
var b = NaN;
console.log(b); // NaN
// NaN 的类型
console.log(typeof b);// number
如果使用JS进行浮点数运算,可能得到一个不精确的结果
null
// null 用来表示一个为空的对象
var a = null;
console.log(a);
// null 的类型
console.log(typeof a); //object
undefined
// undefined 用来表示未定义
var a; // 声明变量但是不赋值
console.log(a); // undefined
// undefined 的类型
console.log(typeof a); // undefined
强制类型转换
将其他的数据类型转换成 String
- 方式一:toString()
console.log((123.45).toString()); //123.45 console.log(true.toString()); //true //console.log(null.toString()); //报错 //console.log(undefined.toString()); //报错 //注意:null 和 undefined 没有 toString() 方法
- 方式二:String()
console.log(String(123.45)); //123.45 console.log(String(false)); //false console.log(String(null)); //null console.log(String(undefined)); //undefined
将其他的数据类型转换成 Number
- 字符串转数字
//纯数字的字符串:直接转换即可 console.log(Number("123.45")); //123.45 //字符串中有非数字的内容:转换为 NaN console.log(Number("12a3.4b5")); //NaN //字符串是空串或全是空格的字符串:转换为 0 console.log(Number(" ")); //0 console.log(Number("")); //0
- 布尔转数字
console.log(Number(true)); //1 console.log(Number(false)); //0
- Null转数字
console.log(Number(null)); //0
- Undefined转数字
console.log(Number(undefined)); //NaN
- parseInt() 与 parseFloat()
// 从字符串的第一位开始读,读到不是数字为止 console.log(parseInt("123px"));//123 console.log(parseInt("12.3px"));//12 console.log(parseFloat("1a2.3px"));//1 console.log(parseFloat("12.3.4px"));//12.3 // 如果是非String使用上述函数,会先将其转换为String然后再操作 console.log(parseInt(true));//NaN
- 数字进制
/* 十六进制以 0x 开头 八进制以 0 开头 二进制数字以 0b 开头,但兼容性不好 */ console.log(0x10);//16 console.log(010);//8 console.log(0b10);//2 // 这种字符串有些会被当成八进制解析 console.log(parseInt("070"));// 70 or 56 // 指定数字的进制 console.log(parseInt("070", 8));// 70
将其他的数据类型转换成 Boolean
- 数字转布尔
// 除了 0 和 NaN 其余的都是 true console.log(Boolean(123));//true console.log(Boolean(-123));//true console.log(Boolean(0));//false console.log(Boolean(Infinity));//true console.log(Boolean(NaN));//false
- 字符串转布尔
// 除了空串,其余的都是 true console.log(Boolean("hello"));//true console.log(Boolean(""));//false console.log(Boolean(" "));//true
- Null 和 Undefined
console.log(Boolean(null));//false console.log(Boolean(undefined));//false
- 对象也会转换为 true
运算符
算术运算符
- 当对非 Number 类型的值进行运算时,会将这些值转换为 Number,然后再进行运算
- 任何值和 NaN 做运算结果都是 NaN
一元运算符
- 可以使用 + 来将其他类型的值转换成 Number
逻辑运算符
- 如果对非布尔值进行非运算,会先将其转换为布尔值再运算
- 如果对非布尔值进行与或运算,会先将其转换为布尔值再运算,然后返回原值
// 如果第一个值为true,则必然返回第二个值 console.log(1 && 2); // 2 // 如果第一个值为false,则直接返回第一个值 console.log(0 && NaN); // 0 // 如果第一个值为true,则直接返回第一个值 console.log(1 || 2);// 1 // 如果第一个值为false,则直接返回第二个值 console.log(0 || NaN);// NaN
关系运算符
- 对于非数值进行比较时,会将其转换为数字然后再比较
- 任何值和 NaN 做任何比较都是 false
- 如果符号两侧的值都是字符串,不会将其转换为数字进行比较,而会分别按位比较字符串中每个字符的Unicode编码
// 在JS中使用Unicode编码,其中2680是十六进制数字 console.log("\u2680");
<!-- 在页面中使用Unicode编码,其中9856是十进制数字 --> <h1 style="font-size: 100px;">⚀</h1>
相等运算符
- 如果两个值的类型不同,则会自动进行类型转换,将其转换为相同的类型(一般情况下都会转换为 Number)
console.log("1" == 1); // true console.log("1" != 1); //false
- null 不会转换为数值
console.log(null == 0); // false
- undefined 衍生自 null,因此这两个值做相等判断时会返回 true
console.log(null == undefined); // true
- NaN 不和任何值相等,包括它本身
console.log(NaN == NaN); // false
- 可以通过 isNaN() 函数来判断一个值是否为 NaN
console.log(isNaN(NaN));// true
三元运算符
- 如果条件表达式的计算结果是一个非布尔值,会将其转换为布尔值,然后再运算