JS不用指定数据类型,而是通过数据的值暗示类型,这种设计很灵活,随着数据值的改变随之改变类型,但自动转换存在误差,需要根据实际情况自行判断并调整。
常用的3种类型:
字符型string
存储字符(比如 "Bill Gates")的变量
字符串可以是引号中的任意文本。可以使用单引号或双引号
- var str = 'asdfas'; //单引号字符串
- var str2 = "fadfaf"; //双引号字符串
其他转义字符:
unicode字符串字符串拼接:
- var str1 = "hello";
- var str2 = "world";
- var str = str1 + str2
- console.log(str); //helloworld
书中用的是text,网上查的是string,两者区别看起来并不是很大,感觉在JS中这两个并没有做特殊的区别,毕竟不用声明具体的类型,但是本质上这两个类型还是有差异的
- :string | VARCHAR | :limit => 1 to 255 (default = 255)
- :text | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536)
从一般的经验上讲: :string 被用于短文本输入(用户名,电子邮件,密码,标题等) :text 被用于预计文本长度较长的文本输入(描述,评论内容等)
number:只有一种数字类型。数字可以带小数点,也可以不带
当数字与文本混合时,数据被视为文本
- var num1=5.02; //使用小数点来写
- var num2=520; //不使用小数点来写
-
- //极大或极小的数字可以通过科学(指数)计数法来书写
- var y=123e5; // 12300000
- var z=123e-5; // 0.00123
数值范围:
Infinity 或者 Infinity特殊的数值NaN:
number类型,是一个数值相关函数:
isNaN() 判断数据是否是NaN, 是返回true,否则返回false
用来判定输入内容是否为非数字,借由检查NaN来检查非数字的情况
- //NaN是一个特殊的number,与其他所有值都不相等,包括它自身
- console.log(NaN === NaN ); //false
-
- //唯一识别NaN的方法
- console.log(isNaN(NaN) ); //true
-
- // 范围:5e324 ~ 1.7976931348623157e+308
- var min = 5e324;
- var max = 1.7976931348623157e+308;
- var a = 1.7976931348623157e+309;
-
- console.log(min); //Infinity
- console.log(max); //1.7976931348623157e+308
- console.log(a); //Infinity
- console.log(isFinite(a)); //false(超出范围,不在数值范围内)
isFinite() 判断数据是否在范围内,在范围内返回true,否则false
boolean:布尔(逻辑)只能有两个值:true 或 false
常量:用来表示不会改变的数字,有利于存储需要写死在代码里的数据,并赋予有叙述性的名称,让代码更易于理解并便于在代码中修改
使用const创建,必须初始化,如果没有初始化,在计算过程中如果要显示数字,却收到非数值数据时会显示undefined或NaN
- const TAXRATE;//未初始化
- const DONUTPRICE = 1.2;
变量:会改变的数据,可以用var和let进行声明
三种声明JS变量的方式:var、let、const,其中,let、const 是 ES6中新加的
自从ES6增加了 let 和 const 之后,基本上就不再使用var了。
let 和 const 声明的变量有明确的作用域、声明位置、不变的值,使得变量的声明有了更好的约束,有助于提高代码的质量。
合法性:可用字母、下划线和美元符号作为开头,其他任意字符都不可
驼峰命名:采用单词叠加&首字母大写的方式,通常首个单词字母小写表示变量和函数
- var getDount();
- var numDonuts;
将字符串转换为数字,其字符串中不能包含除数字外的其他字符
- parseInt();//将字符转换为整数
- parseFloat();//将字符转换为浮点数
-
- var numCakeDonuts = parseFloat(document.getElementById("cakedonuts").value);
.value取值
JS允许我们通过 getElementById()函数以id访问网页元素,但这个函数不会直接取值,需要以JS对象的形式提供HTML域内容,我们通过域的value性质访问数据
document.getElementById("cakedonuts").value
toFixed()把金额四舍五入到指定的位数
- toFixed(digits)
- total.toFixed(2) //保留两位小数
-
- const numObj = 12345.6789;
-
- numObj.toFixed() // Returns '12346': rounding, no fractional part
- numObj.toFixed(1) // Returns '12345.7': it rounds up
- numObj.toFixed(6) // Returns '12345.678900': additional zeros
- (1.23e+20).toFixed(2) // Returns '123000000000000000000.00'
- (1.23e-10).toFixed(2) // Returns '0.00'
- 2.34.toFixed(1) // Returns '2.3'
- 2.35.toFixed(1) // Returns '2.4': it rounds up
- 2.55.toFixed(1) // Returns '2.5': it rounds down as it can't
- // be represented exactly by a float and the
- // closest representable float is lower
- 2.449999999999999999.toFixed(1) // Returns '2.5': it rounds up as it less
- // than NUMBER.EPSILON away from 2.45 and therefore
- // cannot be distinguished
- -2.34.toFixed(1) // Returns '-2.3': due to operator precedence,
- // negative number literals don't return a string…
- (-2.34).toFixed(1) // Returns '-2.3'
indexOf()检查出现内容
返回某个指定的字符串值在字符串中首次出现的位置。
如果没有找到匹配的字符串则返回 -1。
注意: indexOf() 方法区分大小写。
提示: 可以查看类似方法 lastIndexOf()
- indexOf(searchString)
- indexOf(searchString, position)
- if(donutString.indexOf("dozen") != -1){
- ...
- }
HTML&JS
- <html>
- <head>
- <title>Duncan's Just-In-Time Donutstitle>
- <link rel="stylesheet" type="text/css" href="donuts.css">
- <script type="text/javascript">
- function updateOrder()
- {
- const TAXRATE = 0.0925;
- const DONUTPRICE = 0.5;
- var numCakeDonuts = parseDonuts(document.getElementById("cakedonuts").value);
- var numGlazedDonuts = parseDonuts(document.getElementById("glazeddonuts").value);
- if(isNaN(numCakeDonuts))
- numCakeDonuts = 0;
- if(isNaN(numGlazedDonuts))
- numGlazedDonuts = 12;
- var subTotal = (numCakeDonuts + numGlazedDonuts) * DONUTPRICE;
- var tax = subTotal * TAXRATE;
- var total = subTotal + tax;
- document.getElementById("subtotal").value = "$" + subTotal.toFixed(2);
- document.getElementById("tax").value = "$" + tax.toFixed(2);
- document.getElementById("total").value = "$" + total.toFixed(2);
- }
-
- function parseDonuts(donutString)
- {
- numDonuts = parseInt(donutString);
- if(donutString.indexOf("dozen") != -1)
- numDonuts *= 12;
- return numDonuts;
-
- }
- function placeOrder(form)
- {
- if(document.getElementById("name").value == "")
- alert("I'm sorry but you must provide your name before submitting an order.");
- else if(document.getElementById("pickupminutes").value == "" || isNaN(document.getElementById("pickupminutes").value))
- alert("I'm sorry but you must provide the number of minutes until pick-up before submitting an order.");
- else
- form.submit();
- }
- script>
- head>
-
- <body>
- <div id="frame">
- <div class="heading">Duncan's Just-In-Time Donutsdiv>
- <div class="subheading">All donuts 50 cents each, cake or glazed!div>
- <div id="left">
- <img src="donuttime.png" alt="Just-In-Time Donuts">
- div>
- <form name="orderform" action="donuts.php" method="POST">
- <div class="field">Name:
- <input type="text" id="name" name="name" value=""/>
- div>
- <div class="field"># of cake donuts:
- <input type="text" id="cakedonuts" name="cakedonuts" value="" placeholder="cakedonuts" onchange="updateOrder();"/>
- div>
- <div class="field"># of glazed donuts:
- <input type="text" id="glazeddonuts" name="glazeddonuts" value="" onchange="updateOrder();"/>
- div>
- <div class="field">Minutes 'til pickup:
- <input type="text" id="pickupminutes" name="pickupminutes" value="" />
- div>
- <div class="field">Subtotal:
- <input type="text" id="subtotal" name="subtotal" value="" readonly="readonly"/>
- div>
- <div class="field">Tax:
- <input type="text" id="tax" name="tax" value="" readonly="readonly"/>
- div>
- <div class="field">Total:
- <input type="text" id="total" name="total" value="" readonly="readonly"/>
- div>
- <div class="field">
- <input type="button" value="Place Order" onclick="placeOrder(this.form);"/>
- div>
- form>
- div>
- body>
- html>
CSS
- body {
- font:14px arial;
- text-align:center;
- }
-
- #frame {
- margin-top:15px;
- width:440px;
- }
-
- #left {
- float:left;
- width:130px;
- }
-
- div.heading {
- font:20px arial;
- font-weight:bold;
- margin-bottom:5px;
- }
-
- div.subheading {
- font:15px arial;
- font-style:italic;
- margin-bottom:10px;
- }
-
- div.field {
- margin-bottom:5px;
- text-align:right;
- }