There's also <button type="submit"> where it submits a form when clicked.
So if you want to perform a POST using ajax, that's the best to make use of <button type="button"> so it would not submit the form when the button is clicked.
<button> has default type = "submit" it means if it is within a form element it it will try to submit the form. You can bind your click event to it and perform some action.
<button type="button"> means it is a normal button and you have to bind click event to it to do some action.
The default type for a button is "submit". MDN doesn't talk about it as far as I can see but it is available in the html5 specification.
The missing value default is the Submit Button state.
So setting the type to "button" disables the default behaviour of submitting a form so you won't need to use preventDefault to handle it in javascript.
My personal experience with <button>s that don't have a type specified, is that whenever they were clicked on, the save button for saving changes on the form would get disabled automatically, although no actual submission/ post request was being made.
This was strange because whenever you would try to upload a file, after the file selection window was gone, you could not actually save the changes you made, so no file could be uploaded.
The save button would get disabled correctly as the definition was ng-disabled="form.$submitted" so that after saving you could not click it again.
I got a lead on what was going on from seeing in the debugger the form's AngularJS $submitted flag being true and also recently changed.
I fixed the issue by setting the button's type to "button" so that it won't trigger the form's submitted state getting changed, which it was doing because of its default type having been "submit" as stated in the other answers.
As far as my research goes, the <button> element was introduced in HTML4 and submit was it's default type since.